UDP-局域网搜索案例
工具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();
}
}
运行效果: