工具idea
1.接收者代碼
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPProvider {
public static void main(String[] args) throws IOException {
System.out.println("UDPProvider start");
//作爲接收者,指定一個端口用於接收
DatagramSocket ds = new DatagramSocket(20000);
//構建接收實體
final byte[] buf = new byte[512];
DatagramPacket receivePack = new DatagramPacket(buf,buf.length);
//接收
ds.receive(receivePack);
//打印接收到的信息與發送者的信息
//發送者的IP地址
String ip = receivePack.getAddress().getHostAddress();
int port = receivePack.getPort();
int dataLen = receivePack.getLength();
String data = new String(receivePack.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 responsePack = new DatagramPacket(responseDataBytes,
responseDataBytes.length,
receivePack.getAddress(),
receivePack.getPort());
ds.send(responsePack);
ds.close();
}
}
2.搜索方代碼
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPSearcher {
public static void main(String[] args) throws IOException {
System.out.println("UDPSearcher start");
//作爲搜索方,系統自動分配端口
DatagramSocket ds = new DatagramSocket();
//構建回送信息
String responseData = "HelloWorld";
byte[] responseDataBytes = responseData.getBytes();
DatagramPacket requestPack = new DatagramPacket(responseDataBytes,
responseDataBytes.length);
//本機20000端口
requestPack.setAddress(InetAddress.getLocalHost());
requestPack.setPort(20000);
ds.send(requestPack);
//構建接收實體
final byte[] buf = new byte[512];
DatagramPacket receivePack = new DatagramPacket(buf,buf.length);
//接收
ds.receive(receivePack);
//打印接收到的信息與發送者的信息
//發送者的IP地址
String ip = receivePack.getAddress().getHostAddress();
int port = receivePack.getPort();
int dataLen = receivePack.getLength();
String data = new String(receivePack.getData(),0,dataLen);
System.out.println("UDPSearcher receive from ip" + ip
+ "\tport:" + port +"\tdata:" + data);
ds.close();
}
}
運行效果: