【问题标题】:TCP-Server wont print/receive data from remote clientTCP-Server 不会从远程客户端打印/接收数据
【发布时间】:2015-05-24 03:01:58
【问题描述】:

我遇到了一个奇怪的问题, 本地客户端 tcp-connections (python) 到我的 tcp-server(java,在 windows 8 64 位上)正在工作。例如

Python 客户端.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()

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

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

如果我在我的 remote Linux 机器(Arch 3.18.6 内核,32 位,ip:192.168.2.104)上使用相同的脚本,服务器将不会打印任何内容。 p>

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

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

这里有一段可能对问题很重要的代码。 背后的故事是,服务器在自己的线程中创建了 3 个 serverSocket,每个端口分别为 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

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

【问题讨论】:

  • 你没有防火墙吗?
  • 您的问题标题暗示服务器接收数据但不打印。但是,您对问题的描述表明客户端根本无法连接到服务器。正如@Zielu 已经观察到的,这听起来像是防火墙问题。您需要配置服务器计算机的防火墙以允许端口 30000 上的传入 TCP 流量。
  • 哦,很常见,我花了 20 分钟来写这篇文章...我允许 eclipse.exe 但关闭防火墙就可以了-.-。是的,标题误导了对不起
  • 作为解决方案的说明:监听的不是eclipse,而是需要允许通过防火墙的eclipse产生的java进程。
  • 是的,我认为服务器在 eclipse 的上下文中运行以防网络问题。感谢您的信息

标签: java sockets tcp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多