UDP คือ อะไร ??? คำถามนี้บางท่านอาจจะงง
กันบ้าง ถ้าหากไม่เคยได้ศึกษาเรื่องของ Protocol ฉะนั้น ผมขอเกริ่นสั้นๆ
เพื่อสร้างความเข้าใจกันก่อนนะครับ
ก่อนอื่นคงต้องเริ่มจาก Protocol คืออะไรกันก่อนนะครับ
Protocol ถ้าพูดให้ง่ายก็คือ ข้อตกลงของการรับส่งข้อมูล ว่าจะต้องส่งข้อมูลอะไร
และส่งอย่างไร มีรูปแบบยังไง และจะตอบกลับในลักษณะใด ยกตัวอย่างก็เช่น HTTP
(Hypertext Transfer Protocol ) ซึ่งเป็น โปรโตคอลของเว็บนะครับ เมื่อผมพิมพ์
www.sourcecode.in.th เพื่อขอดูข้อมูลเว็บที่ผมต้องการ โดยผ่านทาง Web Browser
(ยี่ห้อต่างๆ เช่น IE, Nescap) ตัวของ Web Browser ก็จะติดต่อกับ Web Server
แล้วทำการส่งข้อความไปขอข้อมูล ซึ่งข้อความนี้จะต้องเป็นรูปแบบที่ Web Server
เข้าใจ ซึ่งรูปแบบ ดังกล่าว ก็คือ Protocol นั้นเอง ดังตัวอย่างด้านล่างจะเป็นข้อความที่ส่งไปร้องขอข้อมูลที่ผมดักมาได้ครับ
GET / HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel,
application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: th
Accept-Encoding: gzip, deflate
If-Modified-Since: Thu, 06 Jun 2002 17:44:49 GMT
If-None-Match: "1934e-c8-3cff9f91"
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)
Host: www.sourcecode.in.th
Connection: keep-alive |
ต่อมาก็คงเป็นเรื่องที่เกี่ยวกับ UDP
ซึ่งย่อมาจาก User Datagram Protocol , UDP เป็น Protocol ที่อยู่ในชั้นของ
Transport Layer ซึ่งในชั้นนี้จะมีอยู่ 2 Protocol คือ TCP และ UDP ผมจะขอกล่าวเฉพาะ
UDP นะครับ
UDP เป็นการส่งข้อมูลที่ไม่มีการยืนยันการรับส่งข้อมูล
คือผู้ส่งไม่สามารถรู้ได้ว่าข้อมูลได้ถึงผู้รับแล้วหรือไม่ มาถึงตรงนี้ คงเกิดคำถามขึ้นมากันบ้างแล้วนะครับ
UDP มันมีข้อเสียอย่างนี้ แล้วจะใช้ได้เร้อ.... ผมต้องบอกเลย ว่าได้ฮะ ใช้ได้แน่ๆ
แต่เราจะต้องเขียนการตรวจสอบข้อมูลเอาเอง เช่น ถ้าผมส่งข้อมูลไป ถ้าฝั่งที่รับข้อมูลได้รับข้อมูลแล้ว
ก็ให้ตอบกลับมาให้ผม ผมก็ทราบแล้วว่าข้อมูลไปถึง แต่ถ้าไม่มีการตอบกลับภายในระยะเวลาที่ผมกำหนด
ก็ให้แจ้งว่าผู้รับไม่ได้รับข้อความ
ข้อดีของ UDP ที่เห็นกันได้ชัดเจนคือ
มันจะส่งข้อมูลได้เร็วกว่า แบบ TCP และจะไม่มีการสร้าง Connection เกิดขึ้น
ทำให้ข้อมูลที่วิ่งในเครือข่ายมีน้อยลงด้วย
อ๊ะ เกริ่นมาพอสมควรกันแล้วนะครับ
งานนี้มาเริ่มสร้างโปรแกรม Client / Server เพื่อแสดงการรับส่งข้อมูลโดยใช้
UDP กันเลยครับ
1. เปิดโปรแกรม Microsoft Visual Basic
ทำการเลือกสร้างโปรเจ็คแบบ Standard EXE
2. ทำการเพิ่ม คอนโทรล MS Winsock
เข้ามาในโปรเจ็ค โดยเลือกที่ Project->Components แล้วทำการคลิกเลือก
Microsoft Winsock 6.0 ดังรูป
3.ทำการเลือกคอลโทรลต่างๆ แล้ววางตำแหน่งดังรูป
4.ทำการหนด Property ต่างๆ ดังนี้
Name |
Property |
Value |
Text1 |
Text |
[ว่าง] |
Text1 |
Multiline |
True |
Text2 |
Text |
[ว่าง] |
Text2 |
Multiline |
True |
Text3 |
Text |
[ว่าง] |
Command1 |
Caption |
Send |
Winsock1 |
Protocol |
1-sckUDPProtocol |
Winsock2 |
Protocol |
1-sckUDPProtocol |
5. ทำการคัดลอกโค้ดนำไปใส่ในส่วน View
Code
Private Sub Command1_Click()
If Text3.Text <> "" Then
Winsock2.RemoteHost = Winsock2.LocalIP
Winsock2.RemotePort = 6543
Winsock2.SendData Text3.Text
Text3.Text = ""
End If
End Sub
Private Sub Form_Load()
Winsock1.Bind 6543, Winsock1.LocalIP
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsock1.GetData str
Text1.Text = Text1.Text & str & Chr(13) & Chr(10)
'send message to Client
Winsock1.SendData "[received]" & Time
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsock2.GetData str
Text2.Text = Text2.Text & str & Chr(13) & Chr(10)
End Sub
|
6. เมื่อเสร็จแล้ว ก็ทดลอง Run โปรแกรมกันเลยครับ
ทดลองพิมพ์ข้อความแล้วกด Send ดูนะครับ
อธิบายโปรแกรม
โปรแกรมนี้จะทำงานเป็น Server และ Client ในโปรแกรมดียวกัน แต่จะติดต่อส่งข้อมูลระหว่างกันผ่านทาง
MS Winsock Control
การทำงานของโปรแกรมจะเริ่มจากส่วนของ
Winsock1 ที่ทำหน้าที่เป็น Server ทำการ Bind เพื่อรอคอยรับข้อมูลจากผู้ส่ง
ตรงหมายเลขพอร์ท 6543 และ หมายเลข IP ของเครื่อง Server (Winsock1.LocalIP)
และ เมื่อ Server ได้รับข้อมูลที่ส่งมา
คือจะเกิด Event Winsock1_DataArrival
ขึ้น ผมก็จะรับข้อมูลที่ส่งมาโดยใช้
Methode GetData ของ Winsock เพื่อนำข้อมูลขึ้นมาแสดงที่คอนโทรล Text1
ส่วนการทำงานของฝั่ง Client จะทำการกำหนดชื่อ
Host และ หมายเลขพอร์ท ที่เป็นปลายทาง แล้วทำการส่งข้อมูลที่อยู่ในคอนโทรล
Text3 ออกไป ตอนนี้ผมอยากให้สังเกตุที่คำสั่งในการกำหนด Host ปลายทาง คือ
Winsock2.RemoteHost
= Winsock2.LocalIP
จะเห็นได้ว่าผมกำหนดให้ Winsock2 ทำการส่งข้อมูลที่
LocalIP (ก็คือ ip ของเครื่องตัวเอง) เพื่อเป็นการแสดงบนเครื่องๆนี้ เท่านั้น
***หากต้องการส่งไปยังเครื่องอื่น ที่ Run
โปรแกรมนี้เช่นกัน แค่เพียงเปลี่ยนจาก Winsock2LocalIP ไปเป็น หมายเลข IP
ของเครื่องที่ต้องการติดต่อ ก็ส่งข้อมูลได้แล้วครับ
ปิดท้าย
จะเห็นได้ว่าโปรแกรมตัวอย่างผมจะแสดงไว้ในหน้าต่างเดียวกันเลย ก็เพื่อลดขั้นตอนในการอธิบายลงครับ
เอาเฉพาะแนวทาง ที่คุณจำเป็นจะต้องต่อยอด ด้วยตัวเองครับ
หวังว่าตัวอย่างโปรแกรมที่ผมได้นำมาเสนอครั้งนี้ อาจจุดประกาย การสร้างสรรค์โปรแกรม
ในตัวคุณขึ้นมาบ้างนะครับ แล้วพบกันใหม่ กับ 9'M :-P |