Java基础—socket编程—UDP发送及接收
简介:在同一主机上测试,同一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>: