2

ip:port へのソケット接続を確立しようとしていますが、コンピュータの 1 つですべて正常に動作します。クライアントはまずソケット接続でサーバーに接続してログインします。その後、サーバーからの着信接続が期待され、成功します。

しかし、別のコンピューターで試してみたところ、クライアントは最初の接続を確立してログインに成功し、着信接続を待ちました。接続が開始されるサーバー側で、次のメッセージが表示されました。

java.net.NoRouteToHostException

着信接続が失敗しました。

なぜそれが起こるのでしょうか?ファイアウォールの問題でしょうか?

s = new Socket(id, 4446);
BufferedWriter out1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader in1 = new BufferedReader(new InputStreamReader(s.getInputStream()));

それが46行目

java.net.NoRouteToHostException: No route to host: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at sample_server.doComms.run(doComms.java:46)
        at java.lang.Thread.run(Unknown Source)
4

2 に答える 2

7

APIに記載されているとおり:

ソケットをリモート アドレスおよびポートに接続しようとしたときにエラーが発生したことを通知します。通常、介在するファイアウォールが原因で、または中間ルーターがダウンしている場合、リモート ホストに到達できません。

ほとんどの場合、ファイアウォールまたは接続をブロックしている何かがあります。本当にすぐに 1 つある場合は、1 つを無効にしてみて、それがどのように機能するかを確認してください。うまくいかない場合は、別のものです(質問に対するコメントが示すように、完全なスタックトレースが役立つ場合があります)。

于 2012-08-31T15:46:36.087 に答える
2

「ホストへのルートがありません」とは、ホストがターゲットに連絡する方法さえ知らないことを意味します。それはネットワーク接続の問題です。ファイアウォールの問題ではありません。

于 2012-09-01T01:19:56.093 に答える