0

JavaのTCPソケット、つまりSocketとServerSocketを使用して、サーバーとクライアントの両方として機能するノードがいくつかあります。各ノードは永続的な接続を使用して、4〜10個のネイバーと通信します。ただし、ノード(node1)が別のノード(node2)に接続しようとすると、次の例外がスローされる場合があります。

java.net.ConnectException:接続が拒否されました

node2でnetstatを実行すると、適切なポート(この場合は61685)でnode1とのTCP接続が確立されていることが示されます。

tcp 0 0(ノード2):61685(ノード1):55150確立済み

ただし、node1は、接続を試みるたびに同じ例外をスローします。

ServerSocketは次のように作成されます。

void OpenRcvSocket(final int port) {
    Thread rcvthread = new Thread () {
            @Override
        public void run () {
            ServerSocket rcvlistener = null;
            boolean running = true;

            try {
                rcvlistener = new ServerSocket(port);
                while(running) {
                    Socket incoming = rcvlistener.accept();
                    new ConnectionHandler(incoming);
                }
            } catch (IOException ex) {
                System.out.println(ex);
            }

            finally {
                try {
                    rcvlistener.close();
                } catch (IOException ex) {
                    System.out.println(ex);
                }
            }
        }
    };
    rcvthread.start();

}

送信部分は次のようになります。

synchronized void SendMsg(String dest, Message myMsg) {
    PrintWriter printwr = SendingConnectionList.get(dest);
    try {
        if(printwr == null) {
            Socket sendsock = new Socket(dest, port);
            printwr = new PrintWriter(sendsock.getOutputStream(), true);
            SendingConnectionList.put(dest, printwr);
        }
        printwr.print(myMsg.MsgToString());
        printwr.flush();
    } catch (UnknownHostException ex) {
        System.out.println(dest+": "+ex);
    } catch (IOException ex) {
        System.out.println(dest+": "+ex);
    }
}

奇妙なことに、これらのノードは通常、すべての着信接続を拒否しません。これは、10個のネイバーのうち、6個が実際に接続できる可能性があるのに対し、4個は拒否されるためです。私が試したすべてのノードでファイアウォールが実行されているとは思えません。サービスがポートで実行されていることは間違いありません。この例外がスローされる他の理由はありますか?ありがとう!

4

2 に答える 2

0

Windowsでは、Javaがネットワークアクティビティを実行できるようにWindowsファイアウォールに指示する必要がある場合があります。これは誤って拒否された可能性があります。

于 2009-07-29T16:58:58.727 に答える
0

Java セキュリティ ポリシー ファイルを確認することをお勧めします。

デフォルトのポリシー ファイル

JVMがポート/アドレスを使用するのを妨げている何かがそこにある可能性があります。

于 2009-07-29T16:51:20.787 に答える