【发布时间】:2019-09-17 00:47:33
【问题描述】:
我编写了一个服务器/客户端应用程序,我首先在本地运行,然后在互联网上运行。因此,我将路由器配置为它接受端口 xxxx 上的数据并将其转发到我的服务器运行的机器以及它接受来自客户端套接字的连接的机器。所以一切运行良好,客户端可以互相发送消息。所以现在我的问题是,服务器怎么可能将数据发送到其他网络中的客户端,其中端口转发未激活,但是当我手动尝试时它不起作用。
我已经尝试搜索 TCP 如何保存 IP 和端口,并且我还查看了 Internet/TCP/UDP 的概念是如何工作的,但找不到问题的答案。
所以首先我想知道,在我实现我的服务器之前没有端口转发,如果你有任何想法,如果你能在 windows 上给出 c++ 的代码示例,我将不胜感激,这样我就可以在没有端口的情况下建立这样的连接在互联网上转发和外部服务器主机。
【问题讨论】:
-
搜索“NAT打孔”,你会发现像stackoverflow.com/questions/23176800/…这样的文章
-
@RichardCritten 是的,我读过类似的内容,但是否有必要在客户端“会面”的地方有一个在线托管服务器?或者服务器是否也有可能在我的机器上运行,所有客户端都通过 Internet 连接到它?而且每次我搜索类似的东西时,都没有真正的例子来说明如何完成类似的事情,只有方案。
-
只有 NAPT 需要端口转发。它基本上在 NAT 表中放置一个手动配置的条目。当流量来自内部时,这将自动发生。
-
@RonMaupin 所以这就是服务器可以向客户端发送消息的原因?
-
假设它是 NAPT 后面的 IPv4,那么,是的,但请记住,并非一切都是这样。我知道很多人将他们的 PC 直接连接到 ISP 连接,因此他们的 PC 上有公共地址,并且没有 NAPT。
标签: c++ sockets networking tcp c++17