【问题标题】:Client-Server connects while being on the same computer but not while being run on different ones客户端-服务器在同一台计算机上连接但在不同计算机上运行时不连接
【发布时间】: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


【解决方案1】:

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

ServerSocket(int port) 

它将默认接受任何地址上的连接,如果您指定了 IP,则情况并非如此

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    相关资源
    最近更新 更多