一、打开接收端
package day35_net_网络编程.udp传输; import java.io.IOException; import java.net.*; /* * 使用UDP协议接收数据 创建接收端Socket对象 接收数据 解析数据 输出数据 释放资源 */ public class UdpReceiveDate { public static void main(String[] args) throws IOException { int port = 8888; InetAddress address = InetAddress.getLocalHost(); //1.创建接收端Socket对象 DatagramSocket ds = new DatagramSocket(8888,address); //2.接收数据 void receive(DatagramPacket p) 从此套接字接收数据报包。 //DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。 byte[] byts = new byte[1024]; int length = byts.length; DatagramPacket dp = new DatagramPacket(byts,length); System.out.println(1); ds.receive(dp);//阻塞 System.out.println(2); //3.输出数据 // byte[] getData() 返回数据缓冲区。 byte[] byt = dp.getData(); int len = dp.getLength(); String data = new String(byt,0,len); System.out.println("send -->"+ address.getHostName() + "---" + data); //4.释放资源 ds.close(); } }
二、发送端,发送数据
package day35_net_网络编程.udp传输; import java.io.IOException; import java.net.*; /* * 使用UDP协议发送数据 创建发送端Socket对象 创建数据并打包 发送数据 释放资源 * * DatagramSocket:此类表示用来发送和接收数据,基于UDP协议的 * * DatagramSocket() :创建Socket对象并随机分配端口号 * DatagramSocket(int port) :创建Socket对象并指定端口号 * * * UDP协议收发数据的注意事项: * 端口号错误,数据可以正常发出,不会出现异常,但是收不到数据(udp无连接,只管发不管能不能收到) * Exception in thread "main" java.net.BindException: Address already in use: Cannot bind * 端口号已经绑定了 */ public class UdpSendDate { public static void main(String[] args) throws IOException { //1.创建发送端Socket对象,构造方法DatagramSocket(int port, InetAddress laddr) DatagramSocket ds = new DatagramSocket(); //2.发送数据void send(DatagramPacket p) //发包构造方法:DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 String s = "hello udp 0000"; byte[] byts = s.getBytes(); // int length = 1024; int length = byts.length; int port = 8888; //使用本地地址发送数据 InetAddress address = InetAddress.getLocalHost(); DatagramPacket dp = new DatagramPacket(byts,length,address,port); //3.发送数据 ds.send(dp); //4.释放资源 ds.close(); } }
三、输出