1
すべてNetworkInterfaces
でUDPパケットをブロードキャストしようとしています。私はローカルネットワークからの応答を受け取ることができますが、クロスオーバ接続で接続されたデバイスは応答を受信できません。クロスオーバー接続によるUDPブロードキャスト
これは、私は、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());
}
});
}
を返さないすべてのインターフェイスを取得するためのコードです。
final DatagramSocket socket = new DatagramSocket(9800);
socket.setBroadcast(true);
socket.setSoTimeout(5000);
final byte[] data = "A-UDP-BROADCAST".getBytes();
byte[] buffer = new byte[1024];
socket.send(new DatagramPacket(data, data.length, addr, 9800));
while (true) {
try {
final DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
System.out.println(new String(packet.getData()));
} catch (SocketTimeoutException e) {
System.out.println("Timed out.");
return;
}
buffer = new byte[1024];
}
私は、このようなPacketSenderなどの外部プログラムとのパケットを送信するとき、私は返事を受け取ることができていますので、これは、コードのこのセクション内の問題でなければなりません。
それがローカルホスト上で動作する場合、それは明らかにコードで*ない*問題です。これはトポロジまたはルーティングまたはケーブルの問題です。 – EJP
@EJPサードパーティのTCP/UDPデバッグアプリケーションであるPacketSenderは、応答を受信することができるため、コードに障害がある必要があります。その問題か、JVMの問題か、それ以上のテストをしなくてもそれを言うつもりはありません。 – Beryllium
"クロスオーバー接続で接続"。これはクロスオーバー*ケーブル*を意味しますか?これは物理層の問題であり、現代の機器では、ほとんどの場合、ネットワークインターフェイスによって自動的かつ透過的に処理されます。 2つのシステム間でまったく通信できない場合、どのようにしてこの問題の一部になるのかを確認することは困難です。 wiresharkを使って、2つのシステム間で実際にどのパケットが送信されているかを判断します。 –