代码之家  ›  专栏  ›  技术社区  ›  Maleki

无法通过不同网络在套接字上连接

  •  3
  • Maleki  · 技术社区  · 16 年前

    我无法通过另一个网络将在线应用程序连接到其他人。当我们在同一个网络上时,我可以给他们主机地址来连接,但是当我们在互联网上进行连接时,生成的主机地址不允许连接,也不允许使用从whatismyip.com等在线站点获取的IP地址。

    我最大的问题不是调试这段代码,因为它可以在网络内部运行,但是当我们尝试移动到不同的网络时,服务器看不到尝试。另外,我使用的测试端口是2222。

    InetAddress addr = InetAddress.getLocalHost();
    String hostname = addr.getHostName();
    System.out.println("Hostname: " + hostname);
    System.out.println("IP: " + addr.getHostAddress());
    

    启动时将主机显示给服务器

    if (isClient) {
    System.out.println("Client Starting..");
    clientSocket = new Socket(host, port_number); 
    } else {
    System.out.println("Server Starting..");
    echoServer = new ServerSocket(port_number);
    clientSocket = echoServer.accept();
    System.out.println("Warning, Incoming Game..");
    }
    
    3 回复  |  直到 16 年前
        1
  •  7
  •   Robert S. Barnes Antoni    16 年前

    如果它在本地局域网上工作,而不是在互联网上工作,那么一个或两个对等机可能都在 NAT'ed connection ,这意味着您在Internet上看到的公共IP地址与您试图交谈的计算机的IP地址不同。你可能需要设置某种 port forwarding 允许应用程序连接。

        2
  •  1
  •   Nicolas C    16 年前

    问题可能是防火墙配置。

    假设你在家里测试这个(通常大学或公司会更复杂)。

    通常,您需要将路由器配置为让端口2222打开(您也可以打开端口5555并告诉路由器重定向到您局域网上想要的主机(可能有很多)和端口2222)。

    总结如下: 其他用户---->互联网---->[您的调制解调器]互联网IP->[您的路由器]局域网IP->您的计算机局域网IP2

    互联网IP由您的ISP提供;请在此处查找: http://www.whatismyip.com/ 局域网IP:您在路由器配置中定义的。通常:192.168.0.1 LAN_IP2:通常由路由器(DHCP)提供给您的PC。通过输入ipconfig(windows)或ifconfig(linux)找到它。

    您需要告诉路由器打开端口2222,并将其路由到端口2222上的LAN_IP2。 配置路由器通常通过在其HTTP接口上进行连接来完成: http://192.168.0.1

        3
  •  0
  •   aperkins    16 年前

    一些附加信息可能会有所帮助。你能从你所在的地方把机器敲一下吗?你想通过防火墙吗?你说他们是在本地主机或本地网络上工作的-这些有点不同。您是指使用本地空间(即10)的网络吗? . *或192.168。 . 还是类似的?你说你使用的测试IP是2222-不是IP地址。这是地址的域吗?还是端口号?