在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()類似,在收到消息之前線程會處於阻塞狀態),再把數據包內容解析出來~
下圖分別爲雙方收到的消息: