我试图在java中使用TCP编写一个简单的聊天程序。
要连接到服务器,我需要知道它的IP地址。我已连接到网络中的路由器,将我连接到互联网。
当我键入本地IP(由路由器分配)时,它在我的两台计算机之间运行良好。 但是当我输入公共IP时(我从谷歌获得它:"你的ip" ...) - 它没有用。
所以我打开了路由器的设置,并从我的公共IP和特定端口转发规则到本地IP - 它运行良好。
---------问题:
但是如何做到这一点没有转发?我想写一个聊天程序。我不能告诉我的用户:"只是做端口转发" ;)
一个打开我的程序并登录到中央服务器,然后写入公共IP。其他一些用户打开此服务器,下载文件并获取第一个用户的IP(或任何其他所需信息)
但如果第一个用户没有进行端口转发,它就不会工作。如何使它工作?
答案 0 :(得分:0)
为此,您需要了解NAT(网络地址转换)的工作原理。简单来说,NAT负责从外部向内部网络上的正确计算机发送数据包。
例如,假设您将计算机A作为内部网络上的服务器,并在外部使用计算机B.如果您然后尝试从计算机B连接到计算机A,它将无法工作,因为NAT(您的路由器)会在内部网络上知道要将该数据包发送到哪台计算机。
当您想要连接到外部服务器时,它会有所不同。假设计算机A(客户端)在外部网络上,计算机B(服务器)在内部网络上,路由器端口转发到其IP地址。然后,您将能够连接到服务器,因为NAT知道将数据包发送到何处。
所以要让所有用户远离端口转发路由器:
- 在内部网络上端口转发服务器
- 在另一个网络上连接客户端
- 对于内部网络上的客户;使用服务器的本地IP
希望这有帮助!
-Kad