我编写了一个服务器/客户端应用程序的代码,该应用程序首先在本地运行,然后在Internet上运行。因此,我将路由器配置为它接受端口xxxx上的数据,并将其转发到我的服务器运行所在的计算机,该计算机接受客户端套接字的连接。这样,一切运行良好,客户端可以向彼此发送消息。所以现在我的问题是,服务器如何将数据发送到未激活端口转发但其他手动尝试无法正常工作的其他网络中的客户端。
我已经尝试搜索TCP如何保存IP和端口,并且还查看了Internet / TCP / UDP的概念如何工作,但找不到该问题的答案。
首先,我想知道在实现不带端口转发的服务器之前,如果您有任何想法可以在Windows上提供c ++的代码示例,以便我可以在没有端口的情况下建立此类连接,也将不胜感激。在Internet上转发和外部服务器主机。
答案 0 :(得分:0)
Clint -> NAT (router) -> ... -> NAT (router) -> server
当客户端发送消息时(如果是TCP,则可以是连接尝试,如果是UDP,则只是消息),它的NAT不会阻止它,并记住它来自哪个本地地址:端口以及到达哪个地址:端口将转到:[client address:port, server address:port]
。当邮件到达服务器的NAT时,NAT会知道您的服务器,因为您配置了“端口转发”,并将邮件传递到本地网络。现在,当服务器将消息发送回客户端并到达客户端的NAT时,NAT检查其内部表,找到该特定server address:port
的记录,检索client address:port
部分并将消息传递给它。所以一切都按预期进行。
这就是为什么通常当您打开浏览器并访问某些Web链接时,尽管您处于NAT之下,但仍收到带有网页的服务器响应而没有问题。
这是简化的解释,省略了本地/全局地址:端口详细信息。