客戶端代碼:
/*
UDP協議發送數據:
1.創建發送端Socket對象。
2.創建數據,並把數據打包。
3.調用Socket對象的發送方法發送數據包。
4.釋放資源。
*/
public class sendDemo {
public static void main(String[] args) throws IOException {
// 1.創建發送端Socket對象
// 構造方法:DatagramSocket()
DatagramSocket ds = new DatagramSocket();
// 2.創建數據,並把數據打包。
// DatagramPacket (byte[] buf, int length, InetAddress address, int port)
// 創建數據。
byte[] bytes = "Hello, UDP. I'm coming.".getBytes();
// 長度。
int length = bytes.length;
// IP地址對象。
InetAddress address =InetAddress.getLocalHost();
// 端口。
int port = 10086;
// 把數據打包。
DatagramPacket dp = new DatagramPacket(bytes, length, address, port);
// 3.調用Socket對象的發送方法發送數據包。
// public void send(DatagramPacket p)
ds.send(dp);
// 4.釋放資源。
ds.close();
}
}
服務器端代碼:
/*
UDP協議接收數據:
1.創建接收器Socket對象。
2.創建一個數據包(接收容器)。
3.調用Socket對象的接收方法接收數據。
4.解析數據包並顯示在控制檯。
5.釋放資源。
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// 1.創建接收器Socket對象。
// DatagramSocket(int port)
DatagramSocket ds = new DatagramSocket(10086);
// 2.創建一個數據包(接收容器)。
// DatagramPacket (byte[] buf, int length)
byte[] bys = new byte[1024];
int length = bys.length;
DatagramPacket dp = new DatagramPacket(bys, length);
// 3.調用Socket對象的接收方法接收數據。
// public void receive(DatagramPacket p)
ds.receive(dp); // 阻塞
// 4.解析數據包並顯示在控制檯。
// 獲取對方IP
// public InetAddress getAddress()
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
// public byte[] getData(); 獲取數據緩衝區。
// public int getLength(); 獲取數據的實際長度。
byte[] bys2 = dp.getData();
int len = dp.getLength();
String s = new String(bys, 0, len);
System.out.println("從 " + ip + " 接收到:" +s);
// 5.釋放資源。
ds.close();
}
}
運行結果:
從 192.168.8.47 接收到:Hello, UDP. I'm coming.