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

时间:2018-07-13 11:20:49

标签: java sockets server client socketserver

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

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

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

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

在其他网络上的客户端找不到我的服务器时,我缺少什么?

非常感谢您的帮助!

詹姆斯

2 个答案:

答案 0 :(得分:2)

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

10.0.0.0/24网络范围是为专用网络保留的;请参阅Wikipedia的"Private Network"文章。

如果服务器的地址为10.xx.xx.xx,并且您的客户端位于其他网络上,则客户端根本无法直接连接到服务器。您客户的网络根本无法将数据包路由到服务器的网络。

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

可能的解决方案:

  • 让服务器需要一个公共IP地址。
  • 使用私有网络上的公共IP地址设置第三台服务器,并运行某种服务以将流量隧道传输到服务器。 VPN是实现此目的的一种方法。

答案 1 :(得分:1)

服务器必须具有公共IP,以便客户端可以连接到它。或者,您需要在这些网络上VPN(以便可以从客户端的网络访问服务器)。