通過 Socket 實現 UDP 編程
阿新 • • 發佈:2019-03-31
bsp 密碼 字節數組 spa 基於 rgs throw sock 響應
一、DatagramPacket
UDP協議(用戶數據報協議)是無連接、不可靠的、無序的。(特點:速度相對較快)
UDP協議以數據報作為數據傳輸的載體:
進行數據傳輸時,首先需要將要傳輸的數據定義成數據報(Datagram),在數據報中指明所要達到的Socket(主機地址和端口號),然後再將數據報發送出去
DatagramPacket:表示數據報包
DatagramSocket:進行端到端通信的類
二、編程實現基於UDP的Socket通信之服務器端
實現步驟:
1.創建DatagramSocket,指定端口號
2.創建DatagramPacket
3.接受客戶端發送的數據信息
4.讀取信息
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 6 /* 7 * 服務器端,實現基於UDP的用戶登陸 8 */ 9 public class UDPServer { 10 public static void main(String[] args) throws IOException { 11 /*12 * 接收客戶端發送的數據 13 */ 14 //1.創建服務器端DatagramSocket,指定端口 15 DatagramSocket socket=new DatagramSocket(8800); 16 //2.創建數據報,用於接收客戶端發送的數據 17 byte[] data =new byte[1024];//創建字節數組,指定接收的數據包的大小 18 DatagramPacket packet=new DatagramPacket(data, data.length);19 //3.接收客戶端發送的數據 20 System.out.println("****服務器端已經啟動,等待客戶端發送數據"); 21 socket.receive(packet);//此方法在接收到數據報之前會一直阻塞 22 //4.讀取數據 23 String info=new String(data, 0, packet.getLength()); 24 System.out.println("我是服務器,客戶端說:"+info); 25 26 /* 27 * 向客戶端響應數據 28 */ 29 //1.定義客戶端的地址、端口號、數據 30 InetAddress address=packet.getAddress(); 31 int port=packet.getPort(); 32 byte[] data2="歡迎您!".getBytes(); 33 //2.創建數據報,包含響應的數據信息 34 DatagramPacket packet2=new DatagramPacket(data2, data2.length, address, port); 35 //3.響應客戶端 36 socket.send(packet2); 37 //4.關閉資源 38 socket.close(); 39 } 40 }
三、編程實現基於UDP的Socket通信之客戶端
實現步驟
1.定義發送信息
2.創建DatagramPacket,包含將要發送的信息
3.創建DatagramSocket
4.發送數據
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 import java.net.SocketException; 6 import java.net.UnknownHostException; 7 8 /* 9 * 客戶端 10 */ 11 public class UDPClient { 12 public static void main(String[] args) throws IOException { 13 /* 14 * 向服務器端發送數據 15 */ 16 //1.定義服務器的地址、端口號、數據 17 InetAddress address=InetAddress.getByName("localhost"); 18 int port=8800; 19 byte[] data="用戶名:admin;密碼:123".getBytes(); 20 //2.創建數據報,包含發送的數據信息 21 DatagramPacket packet=new DatagramPacket(data, data.length, address, port); 22 //3.創建DatagramSocket對象 23 DatagramSocket socket=new DatagramSocket(); 24 //4.向服務器端發送數據報 25 socket.send(packet); 26 27 /* 28 * 接收服務器端響應的數據 29 */ 30 //1.創建數據報,用於接收服務器端響應的數據 31 byte[] data2=new byte[1024]; 32 DatagramPacket packet2=new DatagramPacket(data2, data2.length); 33 //2.接收服務器響應的數據 34 socket.receive(packet2); 35 //3.讀取數據 36 String reply=new String(data2, 0, packet2.getLength()); 37 System.out.println("我是客戶端,服務器說:"+reply); 38 //4.關閉資源 39 socket.close(); 40 } 41 }
通過 Socket 實現 UDP 編程