Android - Java TCP连接NAT穿透

4
我正在尝试建立一个安卓客户端和Java服务器的客户端/服务器模型,连接使用TCP协议。当安卓设备连接WIFI时,所有代码均可正常工作,但无论何时我连接到一个无线网络(例如3g、4g),套接字都无法连接。我一直在阅读有关NAT穿透的文章,但不确定如何开始实施必要的步骤以允许连接。注意:我的服务器具有静态IP地址。

1
你需要提供更多信息。服务器是否在互联网上,任何其他人都可以连接到它(即不在你家防火墙后面)?你使用的地址是否在私有范围之外?你能否从Android设备连接到其他服务器(浏览、一般TCP或ping)?你的Android设备有什么样的数据计划(是否涵盖非浏览数据访问)?没有答案,只有很多问题。 - DrC
是的,我的服务器在我的路由器后面,所有端口转发都已经处理好了。我有无限的数据,并且可以用于非浏览。 - Jake B
1
还有几件事情需要测试。如果您去一个WiFi热点(即不在与服务器相同的子网上),它是否有效?同样的问题,但是对于WiFi热点上的笔记本电脑是否有效。只是进一步检查可能会导致解决方案的事情。 - DrC
任何事情都是可能的,只是其他许多事情更有可能发生。我唯一能建议尝试的另一件事是看看是否可以让您的Android设备通过蜂窝WAN连接到另一个服务器。 - DrC
我会尝试的,谢谢。你有什么想法,要连接哪个服务器? - Jake B
显示剩余2条评论
1个回答

2

我猜想您遇到了网络相关的问题。假设您的服务器在路由器后面,那么您的服务器套接字必须绑定到其局域网IP(而不是直接绑定公共互联网IP)。然后您需要设置端口转发、防火墙规则等,以确保每个人都能看到您的服务器(使用在线端口开放检查器/从另一个网络上进行telnet测试是一个好的测试)。


谢谢,我会确保端口是开放的。但是我可以通过 WIFI 连接不同子网中的设备(即通过广域网连接)。这可能是 Android 软件出了问题吗? - Jake B
但是,您可以使用诸如http://www.canyouseeme.org/或http://www.yougetsignal.com/tools/open-ports/之类的工具检查是否可以从Internet打开到您的服务器套接字的连接吗?确保输入由您的ISP分配的公共IP和您的服务器套接字侦听的端口。除了防火墙和端口转发外,我知道一些ISP会阻止对未知端口的流量。 - gerrytan
是的,我可以看到使用这些工具之一我的端口没有打开,但是我已经在路由器上设置了所有端口转发,并确保服务器防火墙允许特定端口的流量通过。我想我只能进行一些故障排除了。 - Jake B
继续努力,直到你看到端口打开 :) 处理网络基础设施总是一场战斗。 - gerrytan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接