Chương trình UDPEchoServer cài đặt Echo Server ở chế độ không nối kết, cổng mặc định là 7. Chương trình chờ nhận từng gói tin, lấy dữ liệu ra khỏi gói tin nhận được và gởi ngược dữ liệu đó về Client.
1. UDPEchoServer.java
import java.net.*;
import java.io.*;
public class UDPEchoServer {
public final static int port = 7; // Cong mac dinh cua Server
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(port); // Tao socket voi cong la 7
byte[] buffer = new byte[6000]; // Vung dem chua du lieu cho goi tin nhan
while(true) { // Tao goi tin nhan
DatagramPacket incoming = new DatagramPacket(buffer,buffer.length);
ds.receive(incoming); // Cho nhan goi tin gui den
// Lay du lieu khoi goi tin nhan
String theString = new String(incoming.getData(),0,incoming.getLength());
// Tao goi tin gui chua du lieu vua nhan duoc
DatagramPacket outsending = new DatagramPacket(theString.getBytes(),
incoming.getLength(),incoming.getAddress(), incoming.getPort());
ds.send(outsending);
}
}
catch (IOException e) {
System.err.println(e);
}
}
}
Chương trình EDPEchoClient sẽ cho phép người sử dụng nhận các chuỗi từ bàn phím, gởi chuỗi sang EchoServer ở chế độ không nối kết ở cổng số 7, chờ nhận và in dữ liệu từ Server gởi về ra màn hình.
2. UDPEchoClient.java
import java.net.*;
import java.io.*;
public class UDPEchoClient extends Object{
public final static int serverPort = 7; // Cong mac dinh cua Echo Server
public static void main(String[] args) {
try {
if (args.length ==0) { //Kiem tra tham so, là dia chi cua Server
System.out.print("Syntax: java UDPClient HostName");
return;
}
DatagramSocket ds = new DatagramSocket(); // Tao DatagramSocket
InetAddress server = InetAddress.getByName(args[0]); // Dia chi Server
while(true) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String theString = br.readLine();
byte[] data = theString.getBytes(); // Doi chuoi ra mang bytes
// Tao goi tin gui
DatagramPacket dp = new DatagramPacket(data,data.length,server, serverPort);
ds.send(dp); // Send goi tin sang Echo Server
byte[] buffer = new byte[6000]; // Vung dem cho du lieu nhan
// Goi tin nhan
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
ds.receive(incoming); // Cho nhan du lieu tu EchoServer gui ve
// Doi du lieu nhan duoc dang mang bytes ra chuoi và in ra man hinh
System.out.println(new String(incoming.getData(), 0, incoming.getLength()));
}
}
catch (IOException e) {
System.err.println(e);
}
}
}
Chú ý: khi thực hiện chương trình UDPEchoClient phải đưa vào đối số là địa chỉ của máy tính đang thực thi chương trình UDPEchoServer. Trong ví dụ trên, Server và Client cùng chạy trên một máy nên địa chỉ của UDPEchoServer là localhost (hay 127.0.0.1). Nếu UDPEchoServer chạy trên máy tính khác thì khi thực thi, ta phải biết được địa chỉ IP của máy tính đó và cung cấp vào đối số của chương trình. Chẳng hạn, khi UDPEchoServer đang phục vụ trên máy tính ở địa chỉ 172.18.250.211, ta sẽ thực thi UDPEchoClient theo cú pháp sau:
java UDPEchoClient 172.18.250.211
{ 0 nhận xét... read them below or add one }
Đăng nhận xét