2

私はUDPネットワークプログラム(クライアント-サーバー)の一部を書いています、そして私はいくつかの問題に遭遇しました。

I / Oデータへのストリームを使用したいので、「udp inputstream」をグーグルで検索し、 UDPInputStreamUDPOutputStreamを見つけました。ただし、これらを使用しようとすると、UDPOutputStreamを初期化しようとするとプログラムがスタックします。

これは私のコードのフリーズする行です:

outStream = new UDPOutputStream(InetAddress.getByName("127.0.0.1"), port);
System.out.println("UDP output stream initialized."); // <-- doesn't get called

UDPOutputStreamのソースをチェックアウトしましたが、コードが次の行でスタックしています。

dsock = new DatagramSocket();

なぜ実行がこの行でハングアップするのですか?サーバー側では、単純なUDPコードの「古い」非ストリームバージョンを引き続き使用しており、機能します。ソケットは同じ方法で初期化され、ハングアップしません。初期化にポート番号を付けようとしましたが、問題は解決しません。

4

1 に答える 1

0

ホストマシンには複数のネットワークインターフェイスがあります(たとえば、ループバックインターフェイスの場合は127.0.0.1、ネットワークカードの場合は他のアドレス。複数のネットワークカードが存在する場合があります)。

ループバックアドレス127.0.0.1にバインドすると、ローカルで送信されたパケットのみを受信できます。リモートマシンからネットワーク経由で送信されたパケットを受信する場合は、ローカルIPアドレス(例:192.168.1.100)にバインドする必要があります。

次のことを試してください。

InetAddress addr = InetAddress.InetAddress.getLocalHost();
outStream = new UDPOutputStream(addr, port);
于 2012-12-12T11:34:20.240 に答える