局域网内udp广播发送消息,然后接受消费返回的消息,怎么做呢。

局域网内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
image