2012-12-19 61 views
4

我正在尝试与Android客户端和Java服务器建立客户端/服务器模型。 连接通过TCP。Android - Java TCP连接NAT穿越

当Android设备使用WIFI时,我的所有代码都能正常工作,但是无论何时我连接到无线网络(例如3g,4g),插座都拒绝连接。

我一直在阅读关于NAT遍历,但我不知道从何时开始实施允许连接的必要步骤。

注:我的服务器有一个静态IP地址

+1

您需要提供更多信息。互联网上的其他人是否可以连接到互联网上的服务器(即不在家庭防火墙后面)?您在私人范围之外使用的地址是?你能连接到其他服务器从android设备(浏览,一般tcp或ping)?你有什么样的数据计划在你的Android设备上(它是否涵盖非浏览数据访问)?没有答案,但很多问题。 – DrC

+0

是的,我的服务器在我的路由器后面,并且所有的端口转发都已经处理好了。我有无限的数据,我可以使用数据进行非浏览。 –

+1

还有几件事要测试。如果你去了一个WiFi热点(即不在与服务器相同的子网上),它是否工作?同样的问题,但它是否适用于WiFi热点的笔记本电脑。更进一步的事情来检查,可能会导致解决方案。 – DrC

回答

2

我的猜测是,你有一个网络相关的问题。假设您的服务器位于路由器后面,则您的服务器套接字必须绑定到其LAN IP(不直接绑定公共Internet IP)。然后你需要设置端口转发,防火墙规则等,以确保互联网上的每个人都可以看到你的服务器(使用在线端口打开检查器/从另一个网络telnet是一个很好的测试)

+0

谢谢我会确保端口是开放的。但我可以通过WIFI从不同的子网连接(即通过WAN)。这可能是因为android软件可能有问题吗? –

+0

但是,您可以使用工具(如http://www.canyouseeme.org/或http://www.yougetsignal.com/tools/open-ports/)来检查连接是否可以从互联网打开到服务器套接字中?确保您输入由您的ISP分配的公共IP和您的服务器套接字侦听的端口。除了防火墙和端口转发之外,我知道一些ISP阻止未知端口的流量 – gerrytan

+0

是的,我可以看到我的端口没有使用这些工具之一打开,但是我在我的路由器上设置了所有端口转发,并确保我服务器上的防火墙允许我的特定端口上的流量。我想我只需要做一些故障排除 –