gpt4 book ai didi

java - TCP-服务器不会打印/接收来自远程客户端的数据

转载 作者:行者123 更新时间:2023-12-01 11:45:32 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,本地客户端 tcp 连接(python)到我的 tcp 服务器(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”。

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

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

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

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

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

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

希望有人能帮忙。提前致谢。

最佳答案

防火墙妨碍了。必须在firewall.cpl 中允许javaw.exe。谢谢齐鲁!

关于java - TCP-服务器不会打印/接收来自远程客户端的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com