歡迎您光臨本站 註冊首頁

Java實現UDP通信過程實例分析【服務器端與客戶端】

←手機掃碼閱讀     e36605 @ 2020-05-08 , reply:0

TCP是一種面向連接的傳輸層協議,而UDP是傳輸層中面向無連接的協議,故傳送的數據包不能保證有序和不丟失,實現UDP通信主要用到了兩個類:DatagramPacket和DatagramSocket。
DatagramSocket
這個類用來表示發送和接收數據包的套接字。
//構造方法,創建數據報套接字並將其綁定到本地主機上的指定端口 DatagramSocket socket = new DatagramSocket(0);
DatagramPacket
表示數據報包,用來實現無連接的包的投遞服務。這些數據包選擇不同的路由,經過計算機的存儲轉發,最終到達目的計算機。所以到達的數據包和發送時的順序不一定會相同。
Sever端程序
一,調用DatagramSocket(int port)創建一個數據報套接字,綁定在指定端口上;
二,調用DatagramPacket(byte[] buf,int length),建立一個字節數組來接收UDP包;
三,調用DatagramSocket.receive();
四,最後關閉數據報套接字。
Client端程序
一,調用DatagramSocket()創建一個數據報套接字;
二,調用DatagramPacket(byte[] buf,int offset,InetAddress address,int port),建立要發送的UDP包
三,調用DatagramSocket類的send方法發送數據包;
四,關閉數據報套接字。
數據報套接字發送成功後,相當於建立了一個虛連接,雙方可以發送數據。
實例
服務器端:
/* * 服務器端,實現基於UDP的用戶登陸 */ 

public class UDPServer { public static void main(String[] args) throws IOException {

 /* * 接收客戶端發送的數據 */ 

// 1.創建服務器端DatagramSocket,指定端口 

DatagramSocket socket = new DatagramSocket(8800); 

// 2.創建數據報,用於接收客戶端發送的數據 

byte[] data = new byte[1024];

// 創建字節數組,指定接收的數據包的大小 DatagramPacket packet = new DatagramPacket(data, data.length); 

// 3.接收客戶端發送的數據 

System.out.println("****服務器端已經啟動,等待客戶端發送數據"); socket.receive(packet);

// 此方法在接收到數據報之前會一直阻塞 

// 4.讀取數據 

String info = new String(data, 0, packet.getLength()); System.out.println("我是服務器,客戶端說:" + info); 

/* * 向客戶端響應數據 */ 

// 1.定義客戶端的地址、端口號、數據

 InetAddress address = packet.getAddress();

 int port = packet.getPort(); 

byte[] data2 = "歡迎您!".getBytes(); 

// 2.創建數據報,包含響應的數據信息 

DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port); 

// 3.響應客戶端 

socket.send(packet2); 

// 4.關閉資源 socket.close(); } }
客戶端:
/* * 客戶端 */ 

public class UDPClient { public static void main(String[] args) throws IOException { 

/* * 向服務器端發送數據 */ 

// 1.定義服務器的地址、端口號、數據 

InetAddress address = InetAddress.getByName("localhost");

 int port = 8800; byte[] 

data = "用戶名:admin;密碼:123".getBytes(); 

// 2.創建數據報,包含發送的數據信息 DatagramPacket packet = new DatagramPacket(data, data.length, address, port); 

// 3.創建DatagramSocket對象 DatagramSocket socket = new DatagramSocket(); 

// 4.向服務器端發送數據報 socket.send(packet); /* * 接收服務器端響應的數據 */ 

// 1.創建數據報,用於接收服務器端響應的數據 

byte[] data2 = new byte[1024]; 

DatagramPacket packet2 = new DatagramPacket(data2, data2.length);

// 2.接收服務器響應的數據 

socket.receive(packet2); 

// 3.讀取數據 

String reply = new String(data2, 0, packet2.getLength()); System.out.println("我是客戶端,服務器說:" + reply); 

// 4.關閉資源 

socket.close(); } }


[e36605 ] Java實現UDP通信過程實例分析【服務器端與客戶端】已經有221次圍觀

http://coctec.com/docs/java/show-post-233298.html