Java 套接字客户端到不同网络上的服务器。

Java socket client to server on different network.

我的问题: 如何在 Java 中建立从一个网络上的客户端到另一个网络上的服务器的连接?

背景: 我创建了一个简单的客户端和服务器,可以使用本地主机或在使用同一网络的两台不同计算机上进行良好通信。我使用 inet 地址(例如 inet 10.xx.xx.xx)和端口号(例如 55123)进行连接。

我意识到我的客户端找不到我的服务器,因为它们在不同的网络上,即 IP 地址和端口没有为客户端提供足够的信息来找到服务器。

sock = new Socket(10.xx.xx.xx, 55123);

其他网络上的客户端找不到我的服务器时,我错过了什么?

非常感谢您的帮助!

詹姆斯

服务器必须有 public IP 以便客户端可以连接到它。或者您需要 VPN 通过这些网络(以便可以从客户端网络访问服务器)。

您的问题不Java具体。这实际上是关于 IPv4 / IPv6 网络/寻址的工作原理。

10.0.0.0/24 网络范围为专用网络保留;请参阅维基百科的 "Private Network" 文章。

如果服务器有一个 10.xx.xx.xx 地址,而您的客户端在不同的网络上,那么您的客户端根本不可能直接连接到服务器。您的客户端网络根本无法将数据包路由到服务器网络。

(事实上,全世界有数百万个网络使用 10.xx.xx.xx 地址。您的服务器的 IP 地址不是唯一的......除非在它所连接的专用网络的上下文中。所以哪个在许多可能的服务器中,IP 为(例如)10.42.42.42 个服务器应该将客户端的数据包路由到?)

可能的解决方案:

  • 给服务器需要一个 public IP 地址。
  • 使用也在私有网络上的 public IP 地址和 运行 某种服务来设置第三台服务器以将流量隧道传输到服务器。 VPN 是实现此目的的一种方式。