【问题标题】:Java run ServerSocket on PCJava在PC上运行ServerSocket
【发布时间】: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 连接 - 不是。

标签: java android sockets tcp


【解决方案1】:

(1) 运行服务器的 PC 是否有公共 IP? 如果您还没有申请并且正在家庭或工作环境中运行您的代码,那么您的计算机只有一个私有 IP。考虑到您的服务器和客户端在同一个局域网中连接良好,问题可能出在 IP 上。

(2)如果您有公共 IP,您的服务器是侦听所有 IP 地址还是仅侦听 LAN?检查服务器绑定 IP 是否为 '0.0.0.0',在 ServerSocket 构造函数中设置为空即可。

【讨论】:

  • 发布的问题清楚地表明 OP 已经理解这一点,并且他们的 PC 没有公共 IP,并且正在尝试在路由器上配置端口转发的解决方法,他们希望有一个公共 IP。
  • 我正在使用路由器的公共 IP,希望使用端口转发将传入流量重定向到我的本地 PC,但它似乎无法正常工作
  • @DanGetz "路由器有公网 IP 并被使用" 仅在许多路由器没有公网 IP 的 cmets 中声明
  • @user3494305 我用 java SocketServer 做了一个实验,它遵循你的大部分步骤,除了我尝试使用 PC telnet 而不是移动应用程序并且我的案例有效。我认为另一个方向是在您的 PC 中进行测试,远程登录公共 IP 以查看它是否有效。如果它有效,那么问题可能出在客户端部分,或者服务器和端口重定向部分。
猜你喜欢
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
相关资源
最近更新 更多