是否可以寻址另一个网络中的服务器/客户端套接字?(C++)



我编写了一个服务器/客户端应用程序,我首先在本地运行,然后通过互联网运行。因此,我将路由器配置为它接受端口 xxxx 上的数据,并将其转发到我的服务器运行并接受来自客户端套接字的连接的计算机。因此,一切运行良好,客户端可以相互发送消息。所以现在我的问题是,服务器怎么可能将数据发送到其他网络中的客户端,其中端口转发未激活,但当我手动尝试时它不起作用。

我已经尝试搜索TCP如何保存IP和端口,我还查找了Internet/TCP/UDP的概念是如何工作的,但找不到问题的答案。

所以首先我想知道,在我实现没有端口转发的服务器之前,如果您有任何想法,如果您能在 Windows 上提供 c++ 的代码示例,我也将不胜感激,这样我就可以建立这样的连接没有端口转发和 extern 服务器主机在互联网上。

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部分并将消息传递给它。所以一切都按预期工作。

这就是为什么通常当您打开浏览器并转到某些网络链接时,尽管您落后于 NAT 但您会收到带有网页的服务器响应而没有问题。

这是一个简化的解释,省略了本地/全局地址:端口详细信息。

最新更新