實現發送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
* 實現UDP協議的發送端:
* 實現封裝數據的類 java.net.DatagramPacket 將你的數據包裝
* 實現數據傳輸的類 java.net.DatagramSocket 將數據包發出去
*
* 實現步驟:
* 1. 創建DatagramPacket對象,封裝數據, 接收的地址和端口
* 2. 創建DatagramSocket
* 3. 調用DatagramSocket類方法send,發送數據包
* 4. 關閉資源
*
* DatagramPacket構造方法:
* DatagramPacket(byte[] buf, int length, InetAddress address, int port)
*
* DatagramSocket構造方法:
* DatagramSocket()空參數
* 方法: send(DatagramPacket d)
*
*/
public class UDPSend {
public static void main(String[] args) throws IOException{
// 創建數據包對象,封裝要發送的數據,接收端IP,端口
byte[] date = "你好UDP".getBytes();
//創建InetAdress對象,封裝自己的IP地址
InetAddress inet = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(date, date.length, inet,6000);
//創建DatagramSocket對象,數據包的發送和接收對象
DatagramSocket ds = new DatagramSocket();
//調用ds對象的方法send,發送數據包
ds.send(dp);
ds.close();
}
}
實現接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
* 實現UDP接收端
* 實現封裝數據包 java.net.DatagramPacket 將數據接收
* 實現輸出傳輸 java.net.DatagramSocket 接收數據包
*
* 實現步驟:
* 1. 創建DatagramSocket對象,綁定端口號
* 要和發送端端口號一致
* 2. 創建字節數組,接收發來的數據
* 3. 創建數據包對象DatagramPacket
* 4. 調用DatagramSocket對象方法
* receive(DatagramPacket dp)接收數據,數據放在數據包中
* 5. 拆包
* 發送的IP地址
* 數據包對象DatagramPacket方法getAddress()獲取的是發送端的IP地址對象
* 返回值是InetAddress對象
* 接收到的字節個數
* 數據包對象DatagramPacket方法 getLength()
* 發送方的端口號
* 數據包對象DatagramPacket方法 getPort()發送端口
* 6. 關閉資源
*/
public class UPDReceive {
public static void main(String[] args) throws IOException{
// 創建數據包傳輸對象DatagramSocket綁定端口號
DatagramSocket ds = new DatagramSocket(6000);
//創建字節數據
byte[] data = new byte[1024];
// 創建數據包對象,傳遞字節數組
DatagramPacket dp = new DatagramPacket(data, data.length);
//調用ds對象的方法receive傳遞數據包
ds.receive(dp);
//獲取發送端的IP地址對象
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
//獲取接收到的字節個數
int length = dp.getLength();
System.out.println(new String(data, 0, length) + "........." + ip + ":" + port);
ds.close();
}
}