监听广播地址的Java DatagramSocket
发布时间:2020-12-14 14:48:34 所属栏目:Java 来源:网络整理
导读:我编写了一个简单的测试类,用于监听Eth并接收所有UDP数据包,这些数据包将转到端口5001: public class Main { public static void main(String[] args) throws SocketException,UnknownHostException,IOException { DatagramSocket socket = new DatagramSoc
我编写了一个简单的测试类,用于监听Eth并接收所有UDP数据包,这些数据包将转到端口5001:
public class Main { public static void main(String[] args) throws SocketException,UnknownHostException,IOException { DatagramSocket socket = new DatagramSocket(5001,InetAddress.getByName("255.255.255.255")); socket.setBroadcast(true); System.out.println("Listen on " + socket.getLocalAddress() + " from " + socket.getInetAddress() + " port " + socket.getBroadcast()); byte[] buf = new byte[512]; DatagramPacket packet = new DatagramPacket(buf,buf.length); while (true) { System.out.println("Waiting for data"); socket.receive(packet); System.out.println("Data received"); } } } 它不起作用了.它打印出等待数据并且永远不会继续. tcpdump告诉我,UDP广播包来了.我究竟做错了什么?非常感谢你. 解决方法
接收方无法收听广播地址.
广播地址用于发送者 – 发送者可以发送一个255.255.255.255:5001作为目的地的数据包,并且监听子网中该端口的所有接收者都将接收该数据包.但是没有办法创建一个可以接收“所有UDP数据包”的接收器. 如果您已有广播发送者并希望接收其数据包,则需要侦听通配符地址: DatagramSocket socket = new DatagramSocket(5001,InetAddress.getByName("0.0.0.0")); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容