Datagram (UDP) Sockets

UDP แตกต่างจาก TCP/IP , datagram sockets เป็นแบบ connectionless. นั้นหมายความว่าการเชื่อมต่อระหว่าง client กับ server ไม่สนใจระยะเวลาการตอบโต้ ซึ่ง datagram packet จะส่งยังเดียวไม่สนใจว่าได้รับหรือไม่ UDP จะส่งข้อมูลได้เร็วกว่า TCP แต่มันไม่น่าเชื่อถือในการส่งและรับข้อมูล

ในการเขียนโปรแกรมด้วยภาษาจาวานั้น UDP จะใช้ class ที่ต่างจาก TCP คือใช้ DatagramSocket ซึ่งทำให้ส่งข้อมูลมาเป็นแบบ datagram ซึ่งขั้นตอนในการเขียน network program ของ UDP จะมีดังนี้

1. สร้าง object? DatagramSocket

มันก็เหมือนกับการสร้าง อ็อปเจ็ต ServerSocket ในที่นี้หมายถึงการกำหนดหมายเลข port ที่จะให้ใช้บริการ

ตัวอย่าง

DatagramSocket datagramSocket =

new DatagramSocket(1234);

https://i0.wp.com/mudji.net/press/wp-content/uploads/2006/11/datagram.JPG?resize=403%2C251

2. สร้าง buffer เพื่อรับข้อมูลที่เข้ามาจาก datagrams.

ในการสร้าง buffer นี้ต้องสร้างเป็น array ของ bytes

ตัวอย่างการใช้

byte[] buffer = new byte[256];

3. สร้าง object ของ DatagramPacket สำหรับข้อมูล datagrams ที่รับเข้ามา

constructor นี้ต้องการ 2 ค่าเพื่อเป็น ?arguments:

? byte array ที่ได้สร้างไว้แล้ว

? ขนาดของ array bytes

ตัวอย่างเช่น

DatagramPacket inPacket = new DatagramPacket(buffer, buffer.length);

4. Accept ?datagram ที่เข้ามา

เป็นการยอมรับข้อมูลที่เข้ามาโดยใช้ method ของ DatagramSocket ที่ชื่อว่า receive

ตัวอย่างเช่น

datagramSocket.receive(inPacket);

5. Accept ไอพีและport ของผู้ที่ส่งมา

ใช้ methods getAddress และ getPort ของ object DatagramPacket

ตัวอย่างการใช้งาน

InetAddress clientAddress = inPacket.getAddress();

int clientPort = inPacket.getPort();

6. แปลงข้อมูลจาก buffer.

ทำการแปลงข้อมูลให้อยู่ในรูป stringโดยการ overloaded จาก String constructor ซึ่งมันต้องการ

3 arguments

? byte array;

? จุดเริ่มต้นของ array (= 0 );

? ขนาดของ ?bytes (= ขนาดสูงสุดของ buffer).

ตัวอย่าง

String message = new String(inPacket.getData(), 0,inPacket.getLength());

7. สร้าง datagram เพื่อตอบกลับ

สร้างอ็อปเจ็ต DatagramPacket โดยใช้ ?overloaded ?จาก constructor โดยใช้ 4 arguments

? ?byte array ที่เป็นข้อความตอบกลับ

? ขนาดของการตอบกลับ

? address ของ client

? หมายเลข port ของ client

โดย arguments อาจใช้ method getBytes ของ String class

ตัวอย่างเช่น

DatagramPacket outPacket = new DatagramPacket(response.getBytes(),

response.length(),clientAddress, clientPort);

8. ส่ง datagram ที่ใช้ตอบกลับ

โดยการใช้ method send ของ object DatagramSocket เพื่อส่งข้อมูลต้องการ 1 ค่าคือ DatagramPacket เพื่อใช้งาน ตัวอย่าง

datagramSocket.send(outPacket);

ขั้นตอน 4-8 เป็นการทำงานอยู่ใน loop เพียงขั้นตอนที่ 9 จะไม่ทำงานใน loop

9. ปิด ?DatagramSocket.

ปิดการทำงานเมื่อจะหยุดให้บริการโดยใช้ method close ของ object DatagramSocket

ตัวอย่าง

datagramSocket.close();

นี้ก็เป็นขั้นในการเขียนโปรแกรม network แบบ UDP ในครั้งจะเป็ยตัวอย่างโปรแกรม

Leave a Reply

Your email address will not be published. Required fields are marked *