Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Java 交叉连接上的UDP广播_Java_Sockets_Networking_Network Programming_Udp - Fatal编程技术网

Java 交叉连接上的UDP广播

Java 交叉连接上的UDP广播,java,sockets,networking,network-programming,udp,Java,Sockets,Networking,Network Programming,Udp,我试图在所有网络接口上广播UDP数据包并接收回复。虽然我能够从本地网络接收响应,但通过交叉连接连接的设备无法接收响应 这是获取所有接口的代码,它返回交叉连接的NetworkInterface Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while(interfaces.hasMoreElements()){ Lis

我试图在所有
网络接口上广播UDP数据包并接收回复。虽然我能够从本地网络接收响应,但通过交叉连接连接的设备无法接收响应

这是获取所有接口的代码,它返回交叉连接的
NetworkInterface

    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while(interfaces.hasMoreElements()){
            List<InterfaceAddress> iAddrs = interfaces.nextElement().getInterfaceAddresses();
            iAddrs.forEach(addr -> {
                if(addr.getBroadcast() != null){
                    System.out.println(addr.getBroadcast());

                    sendUDP(addr.getBroadcast());
                }
            });
        }

这一定是本节代码中的一个问题,因为当我使用外部程序(如PacketSender)发送数据包时,我能够收到回复。

我认为您的代码的错误在于如何将接收和发送套接字绑定到同一端口。如果不使用
setReuseAddress()
,其中一个绑定将失败。要解决此问题,只需将第二段代码的第一行更改为使用任意空闲端口:

final DatagramSocket socket = new DatagramSocket();

如果它在本地主机上工作,那么代码显然没有问题。这是一个拓扑、路由或电缆问题。@EJP PacketSender是第三方TCP/UDP调试应用程序,能够接收响应,因此代码一定有错误。这要么是JVM的问题,如果没有更多的测试,我不会这么说,“通过交叉连接连接”。这是指交叉电缆吗?这是一个物理层问题,在现代设备中,几乎总是通过网络接口自动、透明地处理。如果您能够在两个系统之间进行通信,很难看出这是问题的一部分。我将使用wireshark来确定两个系统之间实际发送的数据包。@GilHamilton是的,它通过交叉电缆连接。Wireshark报告正在广播一个数据包,并且正在返回一个响应。“socket.receive()”似乎没有收到该答复。不确定。也许是防火墙问题?
final DatagramSocket socket = new DatagramSocket();