客户端 - 服务器在同一台计算机上连接但在不同的计算机上运行时不连接

时间:2015-12-21 15:58:15

标签: java sockets networking client-server

我正在尝试构建一个基本的客户端 - 服务器应用程序。 当我在同一台计算机上同时运行服务器和客户端时,都可以顺利连接,但如果我尝试从不同的计算机(台式机和笔记本电脑)进行连接,则无法实现连接。服务器甚至不知道有人试图连接到它,而一段时间后客户端超时。起初我认为这是一个防火墙问题,但在服务器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);

1 个答案:

答案 0 :(得分:0)

问题可能在你的服务器端:你必须通过使用构造函数使它响应所有ip而不仅仅是本地ip:

ServerSocket(int port) 

它将默认接受任何地址上的连接,如果您指定了IP

,则不是这种情况