1. 程式人生 > >通過 Socket 實現 UDP 編程

通過 Socket 實現 UDP 編程

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 編程