我的问题: 如何使用Java建立从一个网络上的客户端到另一个网络上的服务器的连接?
背景: 我创建了一个简单的客户端和服务器,可以使用localhost或在使用同一网络的两台不同计算机上正常通信。我使用inet地址(例如inet 10.xx.xx.xx)和端口号(例如55123)进行连接。
我意识到我的客户端找不到我的服务器,因为它们位于不同的网络上,即ip地址和端口没有提供足够的信息供客户端找到服务器。
sock = new Socket(10.xx.xx.xx, 55123);
在其他网络上的客户端找不到我的服务器时,我缺少什么?
非常感谢您的帮助!
詹姆斯
答案 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
个服务器的许多可能的服务器,客户端的数据包是否应该路由到?)
可能的解决方案:
答案 1 :(得分:1)
服务器必须具有公共IP,以便客户端可以连接到它。或者,您需要在这些网络上VPN(以便可以从客户端的网络访问服务器)。