TCP-Server不会从远程客户端打印/接收数据

时间:2015-03-20 16:06:43

标签: java sockets tcp

我面临一个奇怪的问题, 本地客户端tcp-connections(python)到我的tcp-server(java,在Windows 8 64位上)正在运行。例如

Python client.py

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.2.108", 30000))
s.sendall('Hello, server')
s.close()

在端口30000处成功连接到192.168.2.108,服务器在eclipse的控制台上打印“Hello,server”。

如果我将接口更改为loopback接口,它也可以工作。

如果我在远程 Linux机器上使用相同的脚本(Arch with 3.18.6 kernel,32-bit,ip:192.168.2.104),服务器将不会打印任何内容。

如果我尝试通过我的客户端上的nc 192.168.2.108 30000进行连接 - >同样的问题

如果我尝试通过我的客户端上的telnet 192.168.2.108 30000进行连接 - >同样的问题(telnet:连接超时)

这里有一段可能对问题很重要的代码。 背景故事是,服务器在自己的线程中创建3个服务器端口,端口分别为30000,40000,50000。

TCP.java

[...]

// pseudo-code: List<ServerSocket> serverSockets = {serverSocket1 port 30000,   
// serverSocket2 port 40000, serverSocket3 port 50000}

[...]

for(ServerSocket serverSocket : serverSockets){
new Thread(new TCPRunnable(serverSocket)).start();
}

[...]

TCPRunnable.java

[...]

public TCPRunnable(ServerSocket serverSocket) {
    this.serverSocket = serverSocket;
}

public void run() {
    long threadId = Thread.currentThread().getId();
    System.out.println(threadId + ": " + serverSocket);
    // output: 20: ServerSocket[addr=0.0.0.0/0.0.0.0,localport=30000]
    try {
        System.out.println("before accept()");

        while(true){
            System.out.println("before accept() in while-loop");
            Socket socket = serverSocket.accept();
            String message = readMessage(socket);
            System.out.println(threadId + ": " + message );
        }
    } catch (IOException e) {
        e.printStackTrace();
    }  catch (SecurityException e) {
        e.printStackTrace();
    }
    System.out.println("leaving run");
}

[...]
输出`netstat -a |找到“30000”以查看端口正在侦听

TCP    0.0.0.0:30000          be-dsktp:0             LISTENING
TCP    [::]:30000             be-dsktp:0             LISTENING

我希望有人可以提供帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

防火墙挡路了。必须在firewall.cpl中允许javaw.exe。 谢谢Zielu!