หน้าแรก
 การบ้าน
  C/C++ new
  Java new
  Windows Phone
  แจ้งเรื่องที่ต้องการ
 บทความ
  .NET
  Android
  Blackberry
  C++Builder
  Delphi
  Java
  Mobile
  Open Source
  Pocket PC
  Visual Basic
  Web
  Windows Phone
  Others
 แบบเรียนฟรี
  ASP
  ASP.NET Webmatrix
  C++
  eVB
  J2ME
  Java
  PHP
 ซอร์สโค้ด
  Android
  ASP
  C++
  VC++
  CGI-Perl
  Delphi
  Java
  jQuery
  PHP
  Visual Basic
  .NET
 บริการจากเรา
  เปิดท้าย... ขายโค้ด
  Freeware
  อัตราค่าโฆษณา
  รายชื่อลูกค้า
  สถิติผู้เข้าเว็บ
 ดาว์นโหลด
 ค้นหาข้อมูล
 กระดานสนทนา
  .NET
  C/C++
  Delphi
  Java
  Palm/PocketPC
  Visual Basic
  Web
  อื่นๆ
 กระดานงาน
 ลิงค์เว็บ
 เกี่ยวกับผม
 อัตราค่าโฆษณา
Social Network

Facebook  Twitter  YouTube
 New Article
 Webboard
 Freelanceboard
Freeware
โปรแกรมเบอร์ดี (BerDee)
โปรแกรมเบอร์ดี (Android)
เกมส์เป่ายิ้งฉุบ
เกมส์เป่ายิ้งฉุบ(Android)
WebcamMonitor
WebcamMonitor(Windows)
scSendMail
scSendMail(Windows)
MSN Caption
MSN Caption(Windows)
  Freelance comment
  ติดต่อสอบถามมาได้ตลอดนะ...
2015-07-29 13:35:58
  ถ้าผมต้องการเว็บที่พัฒน...
2015-01-18 15:33:54
  ถ้าผมต้องการเว็บที่พัฒน...
2015-01-18 15:32:51
  ติดต่อสอบถามเข้ามาได้นะ...
2014-01-06 12:47:38
  ถ้ายังหาคนสอนไม่ได้ ก็ลอ...
2013-07-06 01:04:37
  สนใจส่งขอบเขตมาคุยราคาก...
2013-03-24 18:54:20
  ถ้ายังไม่มีคนรับงานติดต...
2012-12-16 19:18:14
  สนใจคะ ติดต่อ 0905076277...
2012-11-12 11:07:46
  รับทำโปรเจ็คนักศึกษาหรื...
2012-10-29 03:10:46
  sukit_te34@hotmail.com...
2012-10-29 03:09:36
  Webboard comment
  เขียนโปรแกรมภาษาจาวา
1.โ...

2023-09-12 11:40:28
  ต้องลอง debug ดูเองครับ
ไล่...

2023-06-08 18:03:06
  ร้านค้าแห่งหนึ่ง จะต้องน...
2021-09-21 08:47:08
  จงเขียนโปรแกรมดำเนินการ...
2021-05-07 15:06:11
  จงเขียนโปรแกรมสำหรับคำน...
2021-03-09 14:21:45
  ขอดู...
2021-01-04 23:56:45
  ขอโค้ดเพื่อทำการเรียนกา...
2020-12-09 23:02:09
  แล้ว ?...
2020-12-09 10:56:34
  จ้า...
2020-10-18 16:53:21
  พอดีผมเหลื่อแค่ตัดสต๊อก...
2020-05-31 21:49:43
  Homework comment
  เขียนโปรแกรมเพื่อรับค่า...
2022-02-24 10:45:17
  จากโค้ดนี้อะครับ พอดีลอง...
2021-03-22 01:22:39
  จากโค้ดนี้อะครับ พอดีลอง...
2021-03-22 01:22:39
  โจทย์การบ้าน c++ เขียนรูปแ...
2020-04-06 11:01:33
  แบบนี้ขอเป็น ภาษา php หน่อย...
2019-09-18 14:36:34
  ผมไม่อยากให้คุณได้คะแนน...
2019-04-27 01:29:07
  อาจารย์เขาบอกแนวข้อสอบม...
2019-04-27 00:44:29
  ขอสอบถามการเขียน c++ ครับ เ...
2018-04-02 12:19:21
  โค้ดตัวอย่างศึกษาให้เข้...
2017-11-26 14:50:05
  คำนวณค่าน้ำโดยรับค่ามิเ...
2017-11-20 23:15:26
  Article comment
  เท่าที่อ่าน error คือพื้นที่...
2022-03-23 13:56:48
  เรียน สอบถามปัญหา กับ อ.คร...
2022-01-24 17:39:49
  ต้องการ ให้เขียน โปรแกรม ...
2019-12-09 11:39:58
  รับเขียน arx จาก vc++ 2017 ล็อคโปร...
2019-09-19 09:48:09
  ทำการ register ไฟล์ที่ชื่อ mswinsck.oc...
2019-09-17 14:05:56
  ใน vb 6 ไม่มี component winsock เลยค่ะ ส...
2019-09-03 10:31:02
  รบกวนขอสอบถามหน่อยนะครั...
2019-03-04 05:31:04
  สามารถนำตัวหนังสือจากภา...
2018-12-25 08:54:32
  มีcode ของ VB ไหมค่ะ ถ้ามีรบกว...
2017-09-28 16:50:02
  น่าจะได้ครับ ไม่เคยลอง
...

2017-07-11 09:59:35
  9Mcode comment

Link Exchange

อัตราค่าโฆษณา
 
 J2ME (Java Micro Edition) Tutorial  

- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -

 J2ME (Java Micro Edition)
 
 

บทที่ 7 Network Connection

 

บทที่ 7 Network Connection

Generic Connection Framework

Generic Connection Framework (GCF) เป็นชุดของ API ที่ถูกกำหนดไว้ใน CLDC โดยสามารถเรียกใช้ ผ่านทาง javax.microedition.io

โดยหากเป็น ชุดของการติดต่อ เน็ตเวอร์ค ของ J2SE เค้าจะใช้ java.io.* และ java.net.* ซึ่งไม่เหมาะสมสำหรับการใช้งาน บนอุปกรณ์ ที่มีขนาดเล็ก (ในที่นี้คือ มือถือ) ที่มีความต้องการใช้งาน หน่วยความจำที่น้อย ในการติดต่อผ่าน TCP และ UDP (TCP คือ การติดต่อ ที่มีการยืนยันการรับ และการส่ง, UDP จะเป็นการติดต่อ ที่ไม่มีการยืนยันข้อมูลที่รับและส่ง)

เพื่อให้เห็นภาพ ผมขอเปรียบ การส่งแบบ TCP เหมือนกับการโทรศัพท์ ถ้ามีการโทร(ส่งข้อมูล) หากมีผู้รับ ก็จะทราบ หรือไม่มีผู้รับสาย ผู้โทรก็จะทราบ แต่ การส่งแบบ UDP เปรียบเสมือนการส่งจดหมายธรรมดา ที่ผู้รับจะได้รับ จดหมายหรือไม่ ทางผู้ส่ง ก็ไม่ทราบได้ บางคนอาจจะแย้งว่า ก็โทรไปถามสิ คำตอบของผม คือทำได้ครับ ที่จะให้ UDP มีการตอบยืนยันข้อมูล ซึ่งตรงนี้ คุณต้องเขียนรูปแบบ ขึ้นมาเองครับ ตัวหลักๆของ UDP ไม่ได้จัดการในส่วนนี้ไว้ให้

สำหรับรายละเอียดเพิ่มเติม ของ TCP และ UDP คุณสามารถ หาอ่านได้จาก บทความ ที่เว็บไซต์ www.sourcecode.in.th ครับ

GCF classes & interfaces

รูปแบบโครงสร้างของการใช้งาน Class และการติดต่อใช้งาน จะแสดงดังรูป

GCF Structure
รูปที่ 52 แสดง Class ในการสร้างการติดต่อ

จากรูป จะเห็นได้ว่า ในการสร้าง การติดต่อ สามารถกระทำได้ 4 ทางด้วยกันคือ

  • DatagramConnection, เพื่อส่งและรับข้อมูล แบบ UDP
  • InputConnection, เพื่อรับข้อมูล
  • OutputConnection, เพื่อส่งข้อมูล
  • StreamConnectionNotifier, เพื่อรอ การติดต่อ

โดยการติดต่อทั้งหมด จะทำการติดต่อผ่าน StreamConnection(ทำงานทั้งรับ และส่ง)

Connector Class

Connector Class เป็น คลาสที่ใช้ในการสร้างการติดต่อ ซึ่งมีรูปแบบในการใช้งาน คือ

  • public static Connection open(String name)
  • public static Connection open(String name, int mode)
  • public static Connection open(String name, int mode, boolean timeout)

ซึ่ง รายละเอียดของ พารามิเตอร์ที่ใช้ ได้แก่

  • name บอกรูปแบบการติดต่อที่เป็นแบบ URI
  • mode กำหนดลักษณะการใช้งาน ซึ่งได้แก่ READ, READ_WRITE, WRITE
  • timeout กำหนดช่วงเวลา ในการสร้างการติดต่อ ไม่ให้เกินจากค่าที่กำหนด หากเกินค่าที่ตั้งไว้ จะไม่ทำการเชื่อมต่อให้

รูปแบบการสร้างการติดต่อแบบอื่นๆ

  • DataInputStream openDataInputStream(String name)
  • InputStream openInputStream(String name)
  • DataOutputStream openDataOutputStream(String name)
  • OutputStream openOutputStream(String name)

รูปแบบของ URI จะใช้เป็น <scheme>:<scheme-specific-part>
ตัวอย่างเช่น

  • HTTP Connection
    • Connector.open("http://jananet.com/");
  • Datagram Connection
    • Connector.open("datagram://www.jananet.com:7070");
  • Socket Connection
    • Connector.open("socket://127.0.0.1:5555");
  • Communication with a port
    • Connector.open("comm:0, ;baudrate=9600");
  • Open File
    • Connector.open("file://temp.txt");

คุณจะสังเกตุเห็นว่า จะมีการใช้เครื่องหมาย โคล่อน (" : ") ในการคั่น เพื่อบอกถึงหมายเลขพอร์ท (สำหรับผู้ที่ยังไม่มีพื้นฐานเรื่อง Network สามารถหาอ่านเพิ่มเติมได้จาก บทความ ที่เว็บไซต์ www.sourcecode.in.th )

ขอเพิ่มเติมอีกนิด สำหรับเรื่องหมายเลขพอร์ท, ในเรื่องของหมายเลข ที่คุณสามารถกำหนดขึ้นมาได้เอง แต่ต้องไม่ ไปซ้ำกับ หมายเลขที่เป็นมาตรฐาน เช่น

  • 7 echo
  • 21 FTP
  • 25 SMTP
  • 80 HTTP (Hypertext Transfer Protocol)
  • 109 POP
  • 53 DNS (Domain Name Service)

Java Networking Model

ในการติดต่อสื่อสาร ระหว่างเครื่อง สองเครื่อง บนระบบเน็ตเวิร์ค จะมีเครื่องนึงที่เป็นเครื่องที่ใช้บริการ (เครื่อง Server) และอีกเครื่อง ที่เป็นเครื่อง ที่ขอใช้บริการ (เครื่อง Client) ดังรูป

Networking Model
รูปที่ 53 แสดง การติดต่อสื่อสารระหว่าง Client/Server

จากรูปจะเห็นได้ว่าเครื่องที่เป็น Server จะทำหน้าที่รอคอย การร้องขอ จากเครื่อง Client และเมื่อเครื่อง Client ทำการติดต่อมา เครื่อง Server ก็จะรับการติดต่อนั้น

หลังจากนั้น ทั้งสองเครื่องจะสามารถแลกเปลี่ยนข้อมูลระหว่างกันได้ เมื่อสิ้นสุด การทำงาน ก็จะปิดท้ายด้วยการ ตัดการติดต่อระหว่างกัน

สำหรับในเรื่องนี้ ในภาคปฏิบัติ ก็จะมีการแสดงโค้ด ให้เห็นถึงการทำงานของ Client/Server ครับ

HTTP Basic

การติดต่อกันระหว่างเครื่อง Server และเครื่อง Client ในการบริการเว็บ จะอาศัย รูปแบบมาตรฐาน (Protocol) ที่ชื่อว่า HTTP (Hypertext Transfer Protocol) โดยรูปแบบ จะแสดงดังรูป

HTTP Process
รูปที่ 54 แสดง การติดต่อสื่อสารระหว่าง Client/Server ผ่าน HTTP

การทำงานจะเริ่มเมื่อ ผู้ใช้ ทำการเรียกโปรแกรม ที่ใช้สำหรับดูเว็บ (ไม่ว่าจะเป็นของค่ายไหนก็ตาม) แล้วทำการป้อน เว็บที่ต้องการเข้าไป ,โปรแกรมดังกล่าวจะทำการหา ที่อยู่ขอข้อมูล และจะไปขอข้อมูลจากเครื่องที่ให้บริการ (Web Server) , เครื่องที่ให้บริการ ก็จะทำการส่งข้อมูล กลับมายังโปรแกรม เพื่อแสดงผล

ในการติดต่อระหว่างเครื่องที่เป็น Client และ Server จะอาศัยรูปแบบ Protocol ตามที่ได้กำหนดกันมา หากเป็นเว็บ ก็จะใช้ HTTP ซึ่งมีรูปแบบข้อมูลที่ส่งระหว่างกัน เป็นคำสั่งที่เป็นอักษร

HTTP Request/Response

  • Request คือ การร้องขอ ข้อมูล ที่ส่งจาก Client ไปยัง Server
  • Respone คือ การตอบกลับ จาก Server ไปยัง Client

วิธีการร้องขอแบบ Get และ Post

  • แบบ Get จะเป็นการร้องขอข้อมูลที่ จะมีการแสดงข้อมูลที่ส่งแนบไปด้วยหรือไม่มีก็ได้ โดยข้อมูลดังกล่าวจะแสดงให้ผู้ใช้ได้เห็น และมีข้อจำกัดของข้อมูลเพียง 240 ตัวอักษร
  • แบบ Post จะเป็นการร้องขอข้อมูลที่ จะมีการแสดงข้อมูลที่ส่งแนบไปด้วยหรือไม่มีก็ได้ โดยข้อมูลดังกล่าวจะไม่แสดงให้ผู้ใช้ได้เห็น และสามารถส่งข้อมูลได้มาก(ถึงระดับ MB)

Message Header

คือส่วนหัวของการร้องขอ หรือ การตอบสนอง ที่ถูกส่งระหว่างเครื่อง Server กับ Client

ส่วนของการร้องขอ ของ Client จะมีการแจ้งข้อมูล ให้ Server ทราบถึงลักษณะของข้อมูล ที่เครื่อง Client สามารถรับได้ไปด้วย เพื่อให้ Server ทำการส่งข้อมูลที่ถูกต้องมาให้ ตัวอย่างของ HTTP Request เช่น

User-Agent: Profile/MIDP-1 Configuration/CLDC-1.0
Accept: text/xml
Connection: Keep-Alive

จากรูปแบบ ของ Message Header ข้างต้น จะบอกถึงว่า เครื่องที่เป็น Client จะใช้ MIDP 1.0 และ CLDC 1.0 พร้อมทั้ง สามารถรับไฟล์ที่เป็น xml ซึ่งการติดต่อนี้ จะถูกเก็บรักษาไว้ เมื่อมีการร้องขอ ข้อมูลอีกครั้ง ก็จะใช้ สภาพแวดล้อมเดียว กับครั้งที่แล้ว เช่น session หรือ cookie ค่าเดิม

ส่วนของการตอบสนอง ของ Server จะมีการแจ้งข้อมูล ให้ Client ทราบถึงผลของข้อมูลที่ Client ต้องการ ตัวอย่างของ HTTP Response เช่น

HTTP/1.1 200 OK
Date: Sunday 11-June-2002 04:14:12 GMT
Server JavaWebServer/1.1.1
MIME-Version: 1.0
Content-type: text/html
Content-length: 1029
Connection: Keep-Alive
Last-modified: Thursday 7-May-2000 12:15:35 GMT

MIDP Connectivity

ในการที่เราจะใช้ MIDP สร้างการติดต่อ ผ่านทาง Socket สามารถกระทำได้ โดยผ่านทางการสร้าง Connector ดังตัวอย่าง

  • สร้างการติดต่อ
    • StreamConnection connection = (StreamConnection) Connector.open("socket://localhost:5050", Connector.READ_WRITE);
  • เปิดการติดต่อ
    • DataInputStream is = connection.openDataInputStream();
    • DataOutputStream os = connection.openDataOutputStream();

     

สำหรับการติดต่อกับเว็บ (HTTP) ก็สามารถกระทำได้เช่นเดียวกัน โดยผ่านทาง HttpConnection ซึ่งอยู่ใน javax.microedition.io.HttpConnection และจะมีสถานะการทำงาน 3 สถานะ คือ

  • สร้าง
  • ติดต่อส่งข้อมูล
  • ปิดการติดต่อ

ซึ่งในการเปลี่ยนกันระหว่างสถานะแต่ละสถานะ สามารถกระทำได้ผ่าน เมธอด

  • เปลี่ยนจากสถานะ สร้าง ไปเป็น สถานะ ติดต่อส่งข้อมูล
    • openDataOutputStream(), openOutputStream(), openDataInputStream(), openInputStream(), getLength(), getType(), getHeaderField(), getEncoding(), getResponseCode(), getDate()
  • เปลี่ยนจากสถานะ เมื่อสถานะปัจจุบันเป็น การติดต่อส่งข้อมูล
    • close(), getRequestMethod(), getURL(), getHost(), getFile(), getPort()

     

ตัวอย่างในการสร้าง การติดต่อ จะมีขั้นตอนดังนี้

  • สร้างตัวติดต่อ
    • HttpConnection c = (HttpConnection) Connector.open("http://localhost:8080");
  • กำหนดรูปแบบการติดต่อ
    • c.setRequestMethod(HttpConnection.GET);
  • กำหนดคุณสมบัติของการติดต่อ
    • c.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");

     

HTTP sessions & cookie

เมื่อเราทำการติดต่อกับ Web Server เพื่อร้องขอข้อมูล การติดต่อ อันนั้นจะเป็นการสร้าง Session ขึ้นบน Server เพื่อใช้ในการเก็บข้อมูลของผู้ใช้ท่านนั้น และจะมีการส่งข้อมูลของรหัส Cookie มากับการตอบสนอง ดังตัวอย่างของ HTTP Response

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 53
Date: Tue, 18 Dec 2001 17:19:22 GMT
Server Apache Tomcat/4.0.1 (HTTP/1.1 Connector)
Set-Cookie:JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;Path=/midp

จะสังเกตุได้ว่ามีการส่ง หมายเลขของ Cookie มาให้

ในการจะดึงข้อมูลของ Cookie สามารถทำได้โดยอาศัยเมธอด getHeaderField() ดังตัวอย่าง

HttpConnection hc = (HttpConnection) Connector.open(url);
String cookie = hc.getHeaderField("Set-Cookie");
if(cookie != null) {
   int semicolon = cookie.indexOf(';');
    mSession = cookie.subString(0, semicolon);
}

และเมื่อคุณต้องการจะส่ง cookie ไปกับการร้องขอ อีกครั้ง สามารถทำได้ผ่าน เมธอด setRequestProperty() ดังแสดงใน ตัวอย่าง

HttpConnection hc = (HttpConnection) Connector.open(url);
if(mSession != null) hc.setRequestProperty("Cookie", mSession);

 

ในบทนี้ เราได้ให้ความรู้เกี่ยวกับ ลักษณะของ การติดต่อสื่อสาร ข้อมูล ระหว่าง Client/Server ซึ่งมีประโยชน์ เป็นอันมาก ในการใช้พัฒนาโปรแกรม เพื่อให้เกิดความเข้าใจมากยิ่งขึ้น ให้คุณทดลองโปรแกรมในภาคปฏิบัติ จะได้เห็นถึงการใช้งานจริง

 

BACK

คลิปสอนเขียนโปรแกรม
เรียนเขียนโปรแกรมดอทเน็ต
เรียนเขียนโปรแกรมแอนดรอยด์
เรียนเขียนโปรแกรมเบล็คเบอร์รี่
เรียนเขียนโปรแกรมซี ซีพลัสพลัส
เรียนเขียนโปรแกรมจาวา
เรียนการใช้งานลินุกส์
เรียนการเขียนโปรแกรมวินโดว์โฟน
เรียนการเขียนโปรแกรมพีเฮชพี มายเอสคิวเอล
อัตราค่าโฆษณา
 
Tutorial
eVB Tutorial
ASP.NET Webmatrix Tutorial
J2ME Tutorial
C++  Tutorial
Java  Tutorial
PHP Tutorial
ASP Tutorial
 
แบบสำรวจ

Home - Article - Tutorial - Sourcecode - Dev Handbook - Search - WebBoard - Links - About Us

สงวนลิขสิทธิ์ ห้ามคัดลอก ทำซ้ำ แก้ไข ดัดแปลง ไม่ว่าในรูปแบบใด โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์จากกระทรวงพาณิชย์: 7100503002000
Copyright 2001 SourceCode.in.th