C++ 如何连接客户端和服务器?

C++ 如何连接客户端和服务器?,c++,udp,C++,Udp,即使UDP连接较少,我也希望在客户端和服务器之间建立某种连接。 问题是,一旦服务器从客户机接收到一些东西,我唯一能做的就是发送我的答案就是使用来自客户机的IP和端口 而且。。。在几乎所有情况下,这都不是客户端的IP,因为客户端在Internet上没有IP:只有它的路由器有。 我想知道如何将数据发送回客户机,即使他在路由器后面 我开始相信这是不可能的。。。但这必须是可能的:不要告诉我视频游戏只使用UDP将数据从客户端发送到服务器 只要通过同一个套接字发送回客户端,NAT就会自动解析并将其传递到实际

即使UDP连接较少,我也希望在客户端和服务器之间建立某种连接。 问题是,一旦服务器从客户机接收到一些东西,我唯一能做的就是发送我的答案就是使用来自客户机的IP和端口

而且。。。在几乎所有情况下,这都不是客户端的IP,因为客户端在Internet上没有IP:只有它的路由器有。 我想知道如何将数据发送回客户机,即使他在路由器后面


我开始相信这是不可能的。。。但这必须是可能的:不要告诉我视频游戏只使用UDP将数据从客户端发送到服务器

只要通过同一个套接字发送回客户端,NAT就会自动解析并将其传递到实际的框中。

防火墙后面的UDP选项:

  • 防火墙/NAT将UDP数据包转发到特定计算机的明确规则
  • UPnP自动设置规则(从客户端)
  • UDP的自动返回路径-NAT记住端口和IP地址,并为UDP数据包创建返回规则

  • 你的路由器会注意到它重写了一个传出的数据包,看起来就像来自路由器上的一个端口,记住这一点。如果它随后接收到同一端口的UDP数据包地址,它会说“哦,我知道该发送到哪里!”并将其转发到网络内部原始数据来自的端口


    通常,路由器会记住路由一段时间,如果在该端口上看不到任何内容,就会忘记它们。

    听起来像是在寻找类似的内容。似乎很简单!我真的很想知道,因为我和一些朋友想知道:假设我们有两台来自同一子网络的计算机连接到我们的服务器。。。在服务器端,它们具有相同的IP,并且在同一端口上侦听:NAT如何知道服务器正在与它们中的哪一个通信?它会将它发送回最后一台向服务器发送内容的计算机吗?在这种情况下,除非我们非常小心,否则我们可能会向一个客户发送额外的包,而不会向另一个客户发送任何东西。如果你告诉我它会起作用,我会同意的。但我对这件事很抱歉^^@Snake:NAT所做的部分工作是更改发送到服务器的数据包的起始端口号。即使你的客户端都认为他们在监听相同的端口号,服务器也会看到不同的端口号。我不知道,这太棒了!谢谢!