หลังจากที่เขียนโปรแกรมจาวา Server UDP ที่ให้บริการตอบกลับข้อความแล้วต่อไปจะเขียนโปรแกรมฝั่ง client เพื่อที่จะได้ทำงานร่วมกับโปรแกรม Server ซึ่งขั้นตอนในการเขียนโปรแกรมจาวามีดังนี้
1. สร้าง object DatagramSocket
มันก็คล้ายกับโปรแกรม server ที่ต้องมี DatagramSocket ที่ค่อยเอาไว้รับและส่งข้อมูลที่เป็นแบบ Datagram ใช้คำสั่งโค้ดคือ
DatagramSocket datagramSocket = new DatagramSocket();
2.สร้างข้อมูลส่งออกแบบ datagram
ขั้นตอนนี้คล้ายกับโปรแกรม server ที่ต้องสร้างข้อมูลส่งออกตัวอย่างการใช้
DatagramPacket outPacket =new DatagramPacket(message.getBytes(),message.length(), host, PORT);
3.ส่งข้อมูลที่ต้องการเป็นแบบ datagram
ขั้นตอนนี้ใช้ method ของ object DatagramSocket ที่ชื่อว่า send โดยใช้ชุดข้อมูลที่เป็น datagram เป็นค่าที่ method ต้องการ
ตัวอย่าง
datagramSocket.send(outPacket);
4. สร้าง buffer สำหรับพักข้อมูลที่รับเข้ามา
ตัวอย่าง
byte[] buffer = new byte[256];
5. สร้าง ?DatagramPacket สำหรับเก็บข้อมูลแบบ datagram ที่รับเข้ามา
ตัวอย่าง
DatagramPacket inPacket =new DatagramPacket(buffer, buffer.length);
6. รับข้อมูลที่เป็น datagram ที่ได้รับเข้ามา
ตัวอย่าง
datagramSocket.receive(inPacket);
7. ทำการแปลงข้อมูลเพื่อนำไปใช้
จากตัวอย่างเป็นการแปลงข้อมูลให้เป็น string เพื่อไปแสดงผล
String response =new String(inPacket.getData(),0,inPacket.getLength());
ขั้นตอนตั้งแต่ 2-7 นั้นจะทำซ้ำเรื่อยๆจนกว่าจะปิดการใช้งานเพราะมันต้องทำงานในการรับส่งข้อมูลตลอดการทำงาน
8. ปิดการเชื่อมต่อของ ?DatagramSocket.
คำสั่งในการปิดก็คือ
datagramSocket.close();
ต่อไปเป็นโค้ดโปรแกรมจาวา ที่เป็นตัวอย่างมันจะหยุดทำงานก็ต่อเมื่อเราส่งข้อความว่า ***CLOSE***
[sourcecode language=”java”]
import java.io.*;
import java.net.*;
import java.util.*;
public class UDPEchoClient
{
private static InetAddress host;
private static final int PORT = 1234;
private static DatagramSocket datagramSocket;
private static DatagramPacket inPacket, outPacket;
private static byte[] buffer;
public static void main(String[] args)
{
try
{
host = InetAddress.getLocalHost();
}
catch(UnknownHostException uhEx)
{
System.out.println(“Host ID not found!”);
System.exit(1);
}
accessServer();
}
private static void accessServer()
{
try
{
//Step 1…
datagramSocket = new DatagramSocket();
//Set up stream for keyboard entry…
Scanner userEntry = new Scanner(System.in);
String message=””, response=””;
do
{
System.out.print(“Enter message: “);
message = userEntry.nextLine();
if (!message.equals(“***CLOSE***”))
{
outPacket = new DatagramPacket(
message.getBytes(),
message.length(),host,PORT); //Step 2.
//Step 3…
datagramSocket.send(outPacket);
buffer = new byte[256]; //Step 4.
inPacket =new DatagramPacket(buffer, buffer.length);//Step 5.
//Step 6…
datagramSocket.receive(inPacket);
response =new String(inPacket.getData(),0, inPacket.getLength()); //Step 7.
System.out.println(“\nSERVER> “+response);
}
}while(!message.equals(“***CLOSE***”));
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}
finally
{
System.out.println(“\n* Closing connection… *”);
datagramSocket.close(); //Step 8.
}
}
[/sourcecode]
ผลการรันโปรแกรม server
ผลการรันโปรแกรม client1
ผลการรันโปรแกรม client2
สังเกตเห็นว่า UDP จะต่างกับ tcp เพราะ client สามารถส่งได้ทั้ง 2 client เพราะไม่มีการเชื่อมต่อกันจริงๆดังนั้น server จึงรับข้อมูลได้ทั้ง client 1 และ 2