Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个具有UDP ReuseAdAddress true的Java DatagramSocket实例_Java_Udp - Fatal编程技术网

多个具有UDP ReuseAdAddress true的Java DatagramSocket实例

多个具有UDP ReuseAdAddress true的Java DatagramSocket实例,java,udp,Java,Udp,我对以下两个项目有兴趣: 服务器: final DatagramSocket datagramSocket = new DatagramSocket(null); datagramSocket.setReuseAddress(true); datagramSocket.bind(new InetSocketAddress(12345)); System.out.println(datagramSocket.getReuseAddress()); // returns true final

我对以下两个项目有兴趣:

  • 服务器:

    final DatagramSocket datagramSocket = new DatagramSocket(null);
    datagramSocket.setReuseAddress(true);
    datagramSocket.bind(new InetSocketAddress(12345));
    System.out.println(datagramSocket.getReuseAddress());   // returns true
    
    final byte[] buffer = new byte[4];
    final DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
    datagramSocket.receive(datagramPacket);
    System.out.println(new String(buffer));
    
    datagramSocket.close();
    
  • 客户:

    final byte[] data = "Test".getBytes();
    final DatagramSocket datagramSocket = new DatagramSocket(null);
    final DatagramPacket datagramPacket 
          = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 12345);
    datagramSocket.send(datagramPacket);
    datagramSocket.close();
    
  • 现在,我在同一台机器上多次运行服务器,并运行客户端一次。然后,只有一台服务器接收消息,但其他服务器不接收

    所有服务器是否可能同时接收消息


    我的代码中是否存在错误,或者我对UDP重用的理解中是否存在错误

    为什么??你期待什么样的行为?如果您想要广播,请使用广播。或者多播。这表明这是不可能的:只有设置SO_REUSEADDR选项(托管代码中的SocketOptionName.ReuseAddress)套接字才能共享同一IP地址上的端口,即使这样,行为也是不确定的(通常,一个或另一个套接字将接收数据报,但不是两者都接收)。我理解,对于单播消息,这是不可能的,但只适用于多播消息(我试过了,它可以工作)。非常感谢。正确的答案在评论中