Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用不同网络中的两台电脑将插座连接到服务器插座 描述_Java_Sockets_Serversocket - Fatal编程技术网

Java Can';t使用不同网络中的两台电脑将插座连接到服务器插座 描述

Java Can';t使用不同网络中的两台电脑将插座连接到服务器插座 描述,java,sockets,serversocket,Java,Sockets,Serversocket,目标是让服务器在我的计算机上运行,而另一个人在另一个网络中的计算机上运行客户机 这应该使用java.netpackgage中的Socket和ServerSocket类来完成 预期输出是服务器和客户端之间的连接 实际输出没有连接 源代码: 注意:提供了连接所需的最低代码量,去掉了不必要的打印/日志语句和其他代码,以使UI/应用程序按预期运行 Server.java: class Server { ServerSocket server; Socket connection;

目标是让服务器在我的计算机上运行,而另一个人在另一个网络中的计算机上运行客户机
这应该使用
java.net
packgage中的
Socket
ServerSocket
类来完成

预期输出是服务器和客户端之间的连接
实际输出没有连接

源代码: 注意:提供了连接所需的最低代码量,去掉了不必要的打印/日志语句和其他代码,以使UI/应用程序按预期运行

Server.java:

class Server {
    ServerSocket server;
    Socket connection;
    final int PORT = 0xface    // random port

    public static void main(String[] args) {
        Server application = new Server();    // constructor is just for UI
        application.runServer();
    }

    private runServer() {
        server = new ServerSocket(PORT, 5);
        connection = server.accept();
    }
}
Client.java

class Client {
    String charServerAddress;
    final int PORT = 0xface    // random port, same as Server port

    public static void main(String[] args) {
        Client application = new Client(args[0]);  // where args[0] is 127.0.0.1
        application.runClient();
    }
    
    public Client(String host) {chatServerAddress = host;}

    private runClient() {
        client = new Socket(InetAddress.getByName(chatServerAddress), PORT);
    }
}      
结果 服务器正常运行,但客户端无法连接

在解决问题之前
  • 客户端连接到本地主机,即使用
    127.0.0.1
    作为
    Client=newsocket(InetAddress.getByName(chatServerAddress),PORT)
    中的参数。
    • 一切按预期进行;客户端可以连接到服务器
  • 客户端使用服务器的IP地址连接,服务器与客户端在同一台计算机上运行。我们通过在托管服务器的机器上的cmd上键入
    ipconfig
    ,然后使用
    IPv4地址来获取服务器的IP地址。
    
    • 一切按预期进行;客户端可以连接到服务器
  • 客户端使用服务器的IP地址连接,服务器和客户端在不同的机器上运行。我们在托管服务器的机器上的cmd上键入
    ipconfig
    ,然后使用
    IPv4地址
    获得了服务器的IP地址。
    • 问题:没有错误消息,但是客户端从未连接到服务器
  • 尝试的解决方案
  • 在两台计算机上完全禁用windows防火墙
  • 切换哪台机器托管服务器,哪台是客户端
  • 使用不同的
    端口
    编号
  • 通过在cmd中键入
    ping
    从一台机器ping另一台机器

  • 以上所有操作都会导致相同的错误:
    连接超时

    是否有防火墙设置?两者都位于同一网络中吗?啊,你提到网络是不同的,那么目标节点的地址是公共的吗?@mangusta在查看所有防火墙规则时,Java确实有一些访问被阻止。然而,我们的第一个解决方案是在这两台机器上完全禁用它,这不起作用。是的,服务器和客户端在不同的网络上显示网络连接了吗?@NomadMaker我想没有,我是通过我的ISP通过路由器连接到互联网的,而另一个人在几英里之外的家中,通过路由器通过可能不同的ISP连接到互联网。你家的计算机有外部ip名称吗?否则,您如何找到要连接到它的ip号码?