更多資料請看:https://www.yuque.com/shizhiy...
Java Socket編程之UDP編程
UDP協議(用戶數據報協議)是無連接的、不可靠的、無序的,速度快
進行數據傳輸時,首先將要傳輸的數據定義成數據報(Datagram),大小限制在64k,在數據報中指明數據索要達到的Socket(主機地址和端口號),然後再將數據報發送出去;
**
DatagramPacket類:表示數據報包
DatagramSocket類:進行端到端通信的類
服務器端實現步驟
- 創建DatagramSocket,指定端口號
- 創建DatagramPacket
- 接受客戶端發送的數據信息
- 讀取數據
//服務器端,實現基於UDP的用戶登錄
//1、創建服務器端DatagramSocket,指定端口
DatagramSocket socket =new datagramSocket(10010);
//2、創建數據報,用於接受客戶端發送的數據
byte[] data =newbyte[1024];//
DatagramPacket packet =newDatagramPacket(data,data.length);
//3、接受客戶端發送的數據
socket.receive(packet);//此方法在接受數據報之前會一致阻塞
//4、讀取數據
String info =newString(data,o,data.length);
System.out.println("我是服務器,客戶端告訴我"+info);
//=========================================================
//向客戶端響應數據
//1、定義客戶端的地址、端口號、數據
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "歡迎您!".geyBytes();
//2、創建數據報,包含響應的數據信息
DatagramPacket packet2 = new DatagramPacket(data2,data2.length,address,port);
//3、響應客戶端
socket.send(packet2);
//4、關閉資源
socket.close();
客戶端實現步驟
- 定義發送信息
- 創建DatagramPacket,包含將要發送的信息
- 創建DatagramSocket
- 發送數據
//客戶端
//1、定義服務器的地址、端口號、數據
InetAddress address =InetAddress.getByName("localhost");
int port =10010;
byte[] data ="用戶名:admin;密碼:123".getBytes();
//2、創建數據報,包含發送的數據信息
DatagramPacket packet = newDatagramPacket(data,data,length,address,port);
//3、創建DatagramSocket對象
DatagramSocket socket =newDatagramSocket();
//4、向服務器發送數據
socket.send(packet);
//接受服務器端響應數據
//======================================
//1、創建數據報,用於接受服務器端響應數據
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2,data2.length);
//2、接受服務器響應的數據
socket.receive(packet2);
String raply = new String(data2,0,packet2.getLenth());
System.out.println("我是客戶端,服務器說:"+reply);
//4、關閉資源
socket.close();