Recent Posts

Java: Xây dựng chương trình Client - Server ở chế độ KHÔNG kết nối (UDP)

-

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




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@