โปรแกรมจาวา UDPEchoClient

หลังจากที่เขียนโปรแกรมจาวา 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

Source code UDPEchoClient.java

Source code UDPEchoServer.java

Leave a Reply

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