【发布时间】:2020-05-12 01:34:54
【问题描述】:
一个常见项目的常见问题:我试图在我的本地 PC 上运行一个 ServerSocket Java 程序并从一个 Android 客户端连接到它。正如其他人所经历的那样,当客户端连接到本地地址(例如 192.168.xxx.xxx)时,一切顺利。如果我尝试通过互联网连接,则没有任何反应:
现在,这是我尝试过的事情:
- 在 Windows 防火墙中创建入站/出站规则以允许服务器端口 (3000) 的流量
- 在客户端套接字中使用了公共 IP(此处获取的 IP)
- 在我的路由器上设置端口转发:端口 3000 上的入站连接被重定向到服务器的本地 IP(例如 192.1686.xxx.xxx 再次)
- 使用“netstat -anp tcp”检查服务器的 IP 地址是否正在侦听端口 3000。
- 禁用了我路由器上的任何防火墙,以防万一。
仍然没有联系。使用此工具 (https://www.canyouseeme.org/) 我尝试检查端口是否可见(当然,服务器应用程序正在运行),但什么也没有,我得到的只是超时。
我别无选择,我希望有人能告诉我我缺少什么。
谢谢。
【问题讨论】:
-
你所描述的应该可以正常工作。不幸的是,除了“它不工作”之外,您没有提供可以显示您的设置与工作设置有何不同的具体细节,所以我不确定这个问题如何由外人回答。您是否有任何第三方防火墙或可能包含防火墙功能的防病毒程序?您是否对错别字进行了三次检查(很难发现自己的错别字)?也许您可以发布创建 ServerSocket 的代码,以及您设置的防火墙和转发规则的图像?
-
禁用您电脑上的防火墙。
-
你的java server socket不只是绑定到本地ip吗?
-
我也试过禁用防火墙,但没有成功。我有一个 VPN 设置,我在测试期间关闭了它。我的 java 套接字手动绑定到本地 PC (192.168.whatever.whatever.)
-
尝试从本地运行的 Android 模拟器连接,问题可能出在原始 TCP - 一些移动 ISP 不允许这样。因此,例如默认端口上的 http/https 将在移动客户端上工作,但自定义 TCP 连接 - 不是。