java-socket實現UDP編程示例

在java中,實現UDP 的連接步驟和實現TCP連接的步驟相似,建立socket連接,然後傳輸數據。

使用UDP進行連接的服務器端,通過DatagramSocket獲取UDP連接,通過DatagramPacket獲取到用戶數據報,發送數據,則把數據封裝成一個DatagramPacket對象並指定目的地址和其端口號——

public class UDP_Server {
	public static void main(String[] args) throws IOException {
		//創建服務器端socket並制定端口
		DatagramSocket socket = new DatagramSocket(8800);
		byte [] data = new byte[1024];
		//創建一個packet來接受收到的UDP包
		DatagramPacket packet = new DatagramPacket(data, data.length);
		System.out.println("************服務器端已啓動*************");
		//在socket  receive到包之前,會一直處於阻塞狀態
		socket.receive(packet);
		String info = new String(data, 0, packet.getLength());
		System.out.println("我是服務器,客戶端說:"+info);
		
		//給客戶端迴應
		InetAddress address = packet.getAddress();
		int port = packet.getPort();
		byte [] data2 = "歡迎您!".getBytes();
		DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
		socket.send(packet2);//用socket發送過去。
		socket.close();//關閉資源
		
	}
}

使用UDP的客戶端通過這種形式可以發送/接受用戶數據報——

public class UDP_Client {
	public static void main(String[] args) throws IOException {
		//定義服務器的地址和端口
		InetAddress address = InetAddress.getByName("localhost");
		int port = 8800;
		byte [] data = "用戶名:admin , 密碼:123456".getBytes();
		//創建一個UDP包將其包裝起來發送到指定主機
		DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
		DatagramSocket socket = new DatagramSocket();
		socket.send(packet);
		
		//接收服務器端響應的數據
		//創建數據包用來接收
		byte[] data2 = new byte[1024];
		DatagramPacket packet2 = new DatagramPacket(data2, data.length);
		//接收
		socket.receive(packet2);
		String reply = new String(data2, 0, packet2.getLength());
		System.out.println("我是客戶端,服務器說:"+reply);
		//關閉資源
		socket.close();
	}
}

這裏總結一下,就是:1、把數據封裝成DatagramPacket包,再通過socket來send出去。2、通過socket的receive()接收到數據包(同TCP的accept()類似,在收到消息之前線程會處於阻塞狀態),再把數據包內容解析出來~

下圖分別爲雙方收到的消息:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章