我正在尝试构建一个基本的客户端 - 服务器应用程序。 当我在同一台计算机上同时运行服务器和客户端时,都可以顺利连接,但如果我尝试从不同的计算机(台式机和笔记本电脑)进行连接,则无法实现连接。服务器甚至不知道有人试图连接到它,而一段时间后客户端超时。起初我认为这是一个防火墙问题,但在服务器PC上完全禁用防火墙并没有帮助。尝试更改端口并检查多台计算机。有什么想法会导致这种情况吗? 我控制服务器和客户端,如果需要可以更改两者的代码。服务器总是在同一台PC上运行,我使用硬编码的IP地址直接连接到它。 这是客户端将随机int发送到服务器的代码。
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);
答案 0 :(得分:0)
问题可能在你的服务器端:你必须通过使用构造函数使它响应所有ip而不仅仅是本地ip:
ServerSocket(int port)
它将默认接受任何地址上的连接,如果您指定了IP
,则不是这种情况