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

时间:2010-04-06 19:38:45

标签: java sockets

我无法通过其他网络将我的在线应用程序连接到其他人。当我们在同一个网络上时,我能够为他们提供hostAddress连接,但是当我们通过互联网进行连接时,生成的主机地址不允许连接,也没有使用来自在线网站的ip地址,例如whatismyip .COM

我最大的问题是没有调试此代码,因为它可以在网络内部工作,但是当我们尝试移动到不同的网络时,服务器看不到尝试。另外,我使用的测试端口是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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

问题可能是防火墙配置。

假设您正在家中进行测试(大学或公司通常会更复杂)。

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

总结: 其他用户---->互联网----> [您的调制解调器] internet_IP - > [您的路由器] lan_IP - >你的电脑lan_IP2

internet_IP由您的ISP提供;在这里找到它:http://www.whatismyip.com/ lan_IP:您在路由器配置中定义的。通常:192.168.0.1 lan_IP2:通常由路由器(DHCP)提供给您的PC。通过键入ipconfig(Windows)或ifconfig(Linux)来找到它。

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

答案 2 :(得分:0)

其他一些信息可能会有所帮助。你可以从你所在的位置ping机器吗?你试图通过防火墙吗?你说他们在localhost或本地网络上工作 - 那些有点不同。您是指使用本地空间的网络(即10. 。*或192.168。等)?你说你正在使用2222的测试IP - 这不是一个IP地址。那是地址的域名吗?或者是端口号?