2010-04-06 112 views
3

我在将在线应用程序连接到其他网络上的其他人时遇到问题。当我们在同一个网络上时,我能够给它们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.."); 
} 
+0

哪些IP地址,你看见了什么? 2222不是IP地址。 – 2010-04-06 19:41:05

+0

您的测试结果如何? – 2010-04-11 19:24:57

+0

你解决了这个问题吗?请告诉解决方案或任何资源进行调查。我有同样的问题。 – 2016-03-08 04:43:51

回答

7

如果它工作在LAN上而不是在互联网上,然后一个或者两个对等端可能都在NAT'ed connection之间,这意味着您在Internet上看到的公共IP地址与您要与之通话的计算机的IP地址不同。您可能需要设置某种port forwarding以允许您的应用连接。

+0

现在你提到它了,我认为我的Universitiy Network使用它来掩盖IP地址。我会在接下来的几个小时内做一些独立的确认。我想知道如何解决这个问题。 – maleki 2010-04-06 19:54:04

+0

这两台机器都在Uni网络上还是只有一台?你只需要在其中一台机器上设置端口转发即可工作。另一种解决方案是使用在互联网上作为代理的第三台机器。 – 2010-04-06 20:00:48

+0

当测试只有一个是。我要测试主机不在大学网络上。 – maleki 2010-04-06 20:08:19

0

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

1

问题可能是防火墙配置。

假设你正在家里进行测试(从大学或公司来看,这通常会更复杂)。

通常你需要配置你的路由器让端口2222打开(你也可以打开端口5555并告诉你的路由器重定向到你想在你的lan上的主机(可能有很多)和端口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和路由告诉它lan_IP2端口2222 配置路由器通常是通过连接其http界面上完成:http://192.168.0.1

+0

要小心,如果你在互联网上打开一个端口......甚至似乎是一个虚拟服务器有时可以被黑客利用。 – 2010-04-08 20:57:22

相关问题