【发布时间】:2015-12-21 15:58:15
【问题描述】:
我正在尝试构建一个基本的客户端-服务器应用程序。 当我在同一台计算机上同时运行服务器和客户端时,两者都可以顺利连接,但如果我尝试从不同的计算机(台式机和笔记本电脑)这样做,连接就无法连接。服务器甚至不知道有人试图连接到它,而客户端在一段时间后超时。起初我认为这是一个防火墙问题,但在服务器 PC 上完全禁用防火墙并没有帮助。尝试更改端口并在多台计算机上检查。有什么想法可能导致这种情况吗? 我控制服务器和客户端,如有必要,可以更改两者的代码。服务器始终在同一台 PC 上运行,我使用硬编码的 IP 地址直接连接到它。 这是客户端向服务器发送随机整数的代码。
public static void main(String[] args) {
Socket s = new Socket();
try {
s.connect(new InetSocketAddress("123.45.67.891", 8084), 5000);
s.getOutputStream().write(42);
s.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
}
服务器稍微复杂一些,但考虑到它们在同一台 PC 上运行时设法连接,我认为问题不在于它。
编辑:服务器代码(每个客户端线程。不应该太多)
public void run() {
try {
serverSocket = new ServerSocket(listenPort); //integer
} catch (IOException e) { ... }
while (shouldRun) {
try {
Socket clientSocket = serverSocket.accept(); // Blocked here while trying to connect from remote computer
//Never gets here
ConnectionHandler newConnection = connectionHandlerCreator.create(clientSocket);
connectionHandlers.add(newConnection);
newConnection.initialize();
new Thread(newConnection).start();
} catch (IOException e) { ... }
}
}
Initialize 由以下内容组成(后者用于 I/O)。
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new PrintWriter(clientSocket.getOutputStream(), true);
【问题讨论】:
-
检查两者是否在同一个子网中。还要尝试从两端 ping 地址以确保它们是可 ping 的。
-
您能否至少发布创建 serversocket 行的代码?
标签: java sockets networking client-server