从广域网发送udp数据包到本地计算机没有在路由器C++上设置端口转发

问题描述:

我有一个公用IP的服务器,我想从服务器通过广域网发送一些UDP数据包数据到路由器后面连接的计算机。我有我的家庭连接的公共IP,我有服务器的公共IP,我也可以在必要时获得MAC地址。我正在使用Windows套接字。我知道这一切都可以通过路由器上的端口转发来完成,我所做的一切工作都很好,但是我想知道如何通过C++代码来完成。从广域网发送udp数据包到本地计算机没有在路由器C++上设置端口转发

utorrent或Skype等应用程序能够通过路由器直接将数据从广域网发送到PC,而无需端口转发。只是想知道这是如何完成的。

在此先感谢。

+0

您是否想从NAT后面的某台机器发起连接?您是否在寻找[NAT-PMP](http://en.wikipedia.org/wiki/NAT_Port_Mapping_Protocol)? – tomasz 2014-12-01 20:18:49

+0

我建议读一下关于tcp/ip及其含义 “TCP/IP Illustrated,Vol。1:The Protocols”将是一个好开始 – 2014-12-01 17:22:13

对于TCP,你不必做一件事情。只需从 PC启动连接即可。路由器将知道响应必须路由回PC。

当你需要路由器支持时,UDP很棘手。应用程序通常使用NAT-PMP来实现此目的。*条目提到了uTorrent和Skype。如果你想看看他们是怎么做的,那么在UDP端口5351上监听。

还有另一种叫做UDP hole punching的技术,它需要双方都可直接寻址的第三方。

+0

所以我不太明白,UDP是无连接的,当我发送来自服务器的数据我必须指定一个IP,唯一我可以提供的IP是客户端路由器的公共IP。 – hockeyislife 2014-12-01 19:12:07

+0

哦,对不起,我很sl,,认为它是TCP。请参阅更新。 – 2014-12-01 20:14:58