簡介:在同一主機上測試,同一IP地址,不同的端口,使用UDP發收數據
使用socket編程,通過UDP協議發送數據
需求:使用UDP協議向某IP的某端口發送一條數據
UdpSend.java
package com.Train; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; //udp傳輸: /**步驟:--- * 1、建立udp socket 接收和發送點 * 2、提供數據,打包 * 3、使用send發送 * 4、關閉資源 * */ public class UdpSend { public static void main(String[] args) throws SocketException, UnknownHostException { /** 1、建立udp socket端點 */ DatagramSocket s = new DatagramSocket(); /** 2、提供數據,封裝打包 ---DatagramPacket(byte[] buf, int length, InetAddress address, int port) */ byte[] bs = "正在使用UDP發送--我是數據! ".getBytes(); DatagramPacket dp = new DatagramPacket(bs, bs.length, InetAddress.getByName("192.168.1.189"), 8070); /** 3、使用send發送 */ try { s.send(dp); } catch (IOException e) { System.out.println("發送失敗: "); e.printStackTrace(); } /** 4、關閉資源 */ s.close(); } }
運行以上Java程序:
在網絡數據收發工具中獲取到數據:
使用socket編程,通過UDP協議接收數據
UdpRecv.java
package com.Train; import java.net.DatagramPacket; import java.net.DatagramSocket; //udp傳輸: 接收 /**步驟:--- * 1、建立udp socket,設置接收端口 * 2、預先創建數據存放的位置,封裝 * 3、使用receive阻塞式接收 * 4、關閉資源 * */ public class UdpRecv { public static void main(String[] args) throws Exception{ /**1、建立udp socket,設置接收端口*/ DatagramSocket ds = new DatagramSocket(3020); /**2、預先創建數據存放的位置,封裝*/ byte [] bbuf = new byte [1024]; DatagramPacket dp = new DatagramPacket(bbuf,bbuf.length); /**3、使用receive阻塞式接收*/ ds.receive(dp); System.out.println("ip::"+dp.getAddress().getHostAddress()+"\nport::"+dp.getPort()+"\ndata::"+new String(dp.getData())); /**4、關閉資源*/ ds.close(); } }
測試步驟:
1、運行UdpRecv.java程序后,觀察console的輸出:無
2、使用網絡收發工具,通過UDP協議向3020端口發送數據,點擊send:
3、eclipse<console>: