2014-12-01 51 views
1

我有一個公用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

回答

2

對於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

相關問題