發送端:
package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; /* * 實現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[] data="你好UDP".getBytes(); //創建InetAddress對象,封裝自己的IP地址 InetAddress inet=InetAddress.getByName("127.0.0.1"); DatagramPacket dp=new DatagramPacket(data,data.length,inet,6000); //創建DatagramSocket對象,數據包的發送和接受對象 DatagramSocket ds=new DatagramSocket(); //調用ds對象的方法send,發送數據包 ds.send(dp); ds.close(); } }
接收端
package demo01; 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地址對象 * 接受到的字節個數 * 數據包對象DatagramPacket()方法getLength() * 發送方的端口號 * 數據包對象DatagramPacket()方法getPort() * 6.關閉資源 */ public class UDPReceive { 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(); } }