局域网内udp广播发送消息,然后接受消费返回的消息,怎么做呢。
从未接触过udp这玩意儿,无从下手呀,啊啊啊啊
多简单,我给你写一个。
客户端在局域网内发送UDP广播数据包,并且读取服务器返回得数据包。
服务器
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class Server {
public static void main(String[] args) throws IOException {
try (DatagramSocket datagramSocket = new DatagramSocket(1024)) {
while (true) {
/**
* 接受客户端数据
*/
byte[] buffer = new byte[1024]; // 最大65507个字节
DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
datagramSocket.receive(datagramPacket);
/**
* 客户端信息
*/
String ip = datagramPacket.getAddress().getHostAddress();
int port = datagramPacket.getPort();
/**
* 读取数据
*/
String data = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println("server recv: ip=" + ip + ", port=" + port + ", data=" + data);
/**
* 响应客户端
*/
buffer = data.toUpperCase().getBytes();
datagramSocket.send(new DatagramPacket(buffer, 0, buffer.length, new InetSocketAddress(ip, port)));
}
}
}
}
客户端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client {
public static void main(String[] args) throws Exception {
try(DatagramSocket datagramSocket = new DatagramSocket()){
// 广播消息内容
byte[] buffer = "Hello".getBytes();
/**
* 发送消息
*/
// 构建 DatagramPacket
DatagramPacket datagramPacket = new DatagramPacket(buffer, 0,buffer.length);
datagramPacket.setAddress(InetAddress.getByName("255.255.255.255")); // 广播
datagramPacket.setPort(1024);
// 发送消息
datagramSocket.send(datagramPacket);
/**
* 读取服务器响应
*/
byte[] recvBuffer = new byte[1024];
DatagramPacket recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
datagramSocket.receive(recvPacket);
String recvData = new String(recvPacket.getData(), 0, recvPacket.getLength());
System.out.println("client recv:" + recvData);
}
}
}
牛批,yyds