2011-09-16 8 views
0

メッセージのマルチキャストIP 230.10.10.10、ポート11111をリッスンするUDPクライアントを実行しています。 UDPブロードキャスタと同じサーバーでクライアントJavaコードを実行すると、UDPメッセージを受信できます。ただし、同じドメインの別のサーバーで実行すると、メッセージが表示されません。Java UDPの問題

私はWindows Server 2008を使用しています。どうすればそれをデバッグするのか教えてください。

答えて

1

助けてくれてありがとう。私は今解決した。溶液は、放送事業者は、私はsetInterfaceの方法でリスナーIPを設定する場合、2つのIPアドレスを有し、マルチホームとリスナーが単一IP.Soを有しているリスナー

DatagramSocket datagramSocket = new MulticastSocket(multicastPort); 
((MulticastSocket) datagramSocket).setInterface(inetNicAddress); 

でsetInterfaceの()メソッドをコールすることでしたそれは正常に働いた。

しかし、setInterfaceメソッドはブロードキャストで呼び出され、マルチホームであり、大丈夫だから、これはどういう仕組みかは分かりません。しかし、なぜリスナーにもそれを設定する必要がありますか? 。アドバイスが参考になります。

+0

あなたは最終的に解決策を持って聞いて良いです。私は、あなた自身の答えの中で、代わりにこれについて新しい質問をすることをお勧めします。そうでなければ、誰もそれを見つけることはほとんどありません。 – jeha

1

第1に、UDPは保証された配信プロトコルではありません。 第2に、ネットワーク上でUDPパケットをファイアウォールまたはフィルタリングすることができます。

クライアントマシンからポート11111のサーバーマシンに接続できますか。

+0

私はそれです。おそらくあなたのルータの1つがUDPパッケージをフィルタリングします。あなたの "サーバー"のローカルファイアウォールでもあります。 –

+0

それはサーバーなので、ファイアウォールを無効にすることはできません。しかし、ファイアウォールの設定でポート11111に例外を追加しました。私が知りたいのは、それがファイアウォールの問題かルータフィルタの問題かどうかをどのように確認するのかです。これをデバッグするためのツールやヘルパークラスがありますか? – Dunxton

0

問題は、マルチキャストパケットのTTLである場合もあります。 0の場合、パッケージはローカルでしか受信できません。 Wiresharkのようなツールを使ってネットワークトラフィックを検査することをお勧めします。それが問題ならば、TTL値を32に増やしてください。-Djava.net.preferIPv4Stack=trueも設定する必要があります。

+0

送信者と受信者の両方でこのipv4プロパティを設定していますか? ttlは1に設定されています – Dunxton

+0

必ず両側に設定してください。 – jeha

+0

TTLが1の場合は、パッケージが同じサブネットに限定され、ルータによって転送されません。 – jeha