监听广播地址的Java DatagramSocket

前端之家收集整理的这篇文章主要介绍了监听广播地址的Java DatagramSocket前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我编写了一个简单的测试类,用于监听Eth并接收所有UDP数据包,这些数据包将转到端口5001:
  1. public class Main {
  2.  
  3. public static void main(String[] args) throws SocketException,UnknownHostException,IOException {
  4. DatagramSocket socket = new DatagramSocket(5001,InetAddress.getByName("255.255.255.255"));
  5. socket.setBroadcast(true);
  6. System.out.println("Listen on " + socket.getLocalAddress() + " from " + socket.getInetAddress() + " port " + socket.getBroadcast());
  7. byte[] buf = new byte[512];
  8. DatagramPacket packet = new DatagramPacket(buf,buf.length);
  9. while (true) {
  10. System.out.println("Waiting for data");
  11. socket.receive(packet);
  12. System.out.println("Data received");
  13. }
  14. }
  15. }

它不起作用了.它打印出等待数据并且永远不会继续. tcpdump告诉我,UDP广播包来了.我究竟做错了什么?非常感谢你.

解决方法

接收方无法收听广播地址.

广播地址用于发送者 – 发送者可以发送一个255.255.255.255:5001作为目的地的数据包,并且监听子网中该端口的所有接收者都将接收该数据包.但是没有办法创建一个可以接收“所有UDP数据包”的接收器.

如果您已有广播发送者并希望接收其数据包,则需要侦听通配符地址:

  1. DatagramSocket socket = new DatagramSocket(5001,InetAddress.getByName("0.0.0.0"));

猜你在找的Java相关文章