我试图用java中的TCP编写一个简单的聊天程序。
要连接到服务器,我需要知道它的IP地址。我连接到我网络中的一个路由器,它把我连接到互联网上。
当我输入本地IP (由路由器分配)时,它在我的两台计算机之间工作得很好。但当我输入公共IP时(我从谷歌那里得到的:“你的ip是什么”)
所以我打开了路由器的设置,并制定了从我的公共IP和特定端口到本地IP的转发规则--它起了作用。
-问题:
但是,如何在不转发的情况下实现呢?我想写个聊天程序。我不能告诉我的用户:“只要做端口转发”;)
一个打开我的程序并登录到中央服务器,然后写入那里的公共IP。其他一些用户打开此服务器,下载该文件并获取第一个用户的IP (或任何其他需要的信息)。
但是,如果第一个用户没有进行端口转发,它将无法工作。怎么让它起作用?
发布于 2014-03-16 02:26:53
为此,您需要了解所谓的NAT (网络地址转换)是如何工作的。简单地说,NAT负责从外部向内部网络上的正确计算机发送数据包。
例如,您在内部网络上有计算机A作为服务器,而外部网络上有计算机B。如果您随后尝试从计算机B连接到计算机A,它将无法工作,因为NAT (您的路由器)不知道在内部网络上将该数据包发送给哪台计算机。
当您想连接到外部服务器时,它是不同的。假设计算机A(客户端)在外部网络上,计算机B(服务器)在内部网络上,路由器端口被转发到它的IP地址。然后,您将能够连接到服务器,因为NAT知道在哪里发送数据包。
以便防止所有用户端口转发他们的路由器:
希望这能帮上忙!
-Kad
https://stackoverflow.com/questions/22431117
复制相似问题