目录
基本概念
这里主要是使用了DatagramSocket可以打开本地端口,构建Socket,同时这个类还可以给指定IP和端口发送数据包。
如下,打开本地端口并接收数据:
DatagramSocket ds = new DatagramSocket(2000); //构建接收实体 final byte[] buf = new byte[512]; DatagramPacket receiverPack = new DatagramPacket(buf, buf.length); //接收 ds.receive(receiverPack);
接收到的数据会传给receiverPack。
同样如果是发送
DatagramPacket responsePacket = new DatagramPacket(responseDataBytes, responseDataBytes.length, receiverPack.getAddress(), receiverPack.getPort()); ds.send(responsePacket);
通过构造DatagramPacket指明IP和端口,就可以发送数据了
代码与实例
程序运行截图如下:


源码如下:
UDPProvider.java
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPProvider { public static void main(String[] args) throws IOException { System.out.println("UDPProvider Started."); //接收者,指定接收数据 DatagramSocket ds = new DatagramSocket(2000); //构建接收实体 final byte[] buf = new byte[512]; DatagramPacket receiverPack = new DatagramPacket(buf, buf.length); //接收 ds.receive(receiverPack); //打印发送者信息 String ip = receiverPack.getAddress().getHostAddress(); int port = receiverPack.getPort(); int dataLen = receiverPack.getLength(); String data = new String(receiverPack.getData(), 0, dataLen); System.out.println("UDPProvider receive from ip: " + ip + "\tport: " + port + "\tdata: " + data); //构建一份回送数据 String responseData = "Receive data with len: " + dataLen; byte[] responseDataBytes = responseData.getBytes(); DatagramPacket responsePacket = new DatagramPacket(responseDataBytes, responseDataBytes.length, receiverPack.getAddress(), receiverPack.getPort()); ds.send(responsePacket); System.out.println("UDPProvider Finished!"); ds.close(); } }
UDPSearcher.java
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSearcher { public static void main(String[] args) throws IOException { System.out.println("UDPSearcher Started."); //搜索方自动分配端口 DatagramSocket ds = new DatagramSocket(); //构建一份回送数据 String requestData = "Hello World"; byte[] requestDataBytes = requestData.getBytes(); //根据发送者构造一份回送信息 DatagramPacket requestPacket = new DatagramPacket(requestDataBytes, requestDataBytes.length); //本机2000端口 requestPacket.setAddress(InetAddress.getLocalHost()); requestPacket.setPort(2000); ds.send(requestPacket); //构建接收实体 final byte[] buf = new byte[512]; DatagramPacket receiverPack = new DatagramPacket(buf, buf.length); //接收 ds.receive(receiverPack); //打印发送者信息 String ip = receiverPack.getAddress().getHostAddress(); int port = receiverPack.getPort(); int dataLen = receiverPack.getLength(); String data = new String(receiverPack.getData(), 0, dataLen); System.out.println("UDPSearcher receive from ip: " + ip + "\tport: " + port + "\tdata: " + data); System.out.println("UDPSearcher Finished!"); ds.close(); } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231455.html原文链接:https://javaforall.net
