Java:连接被拒绝,但netstat说不然

时间:2009-07-29 16:44:46

标签: java connection tcpclient

我有几个节点充当使用Java的TCP套接字的服务器和客户端,即Socket和ServerSocket。每个节点使用持久连接与4到10个邻居通信。但是,有时节点(node1)在尝试连接到另一个节点(node2)时可能会抛出以下异常:

java.net.ConnectException:拒绝连接

如果我在node2上运行netstat,则表明已在相应端口上建立了与node1建立的TCP连接(在本例中为61685)。

tcp 0 0(node2):61685(node1):55150 ESTABLISHED

但是,每次尝试连接时,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个被拒绝。我怀疑在我试过的所有节点上都运行了防火墙,我很确定该服务是在端口上运行的。是否会抛出此异常?谢谢!

2 个答案:

答案 0 :(得分:0)

您可能想要检查您的java安全策略文件。

Default Policy File

可能存在阻止JVM使用端口/地址的内容。

答案 1 :(得分:0)

在Windows下,您可能必须告诉Windows防火墙允许Java执行网络活动。这可能是意外拒绝的。