2016-05-18 68 views
1

我正在寫一個程序,需要兩個客戶端(點對點)彼此連接,而無需使用任何服務器,甚至只是在匹配過程中。兩個客戶都已經知道彼此的公共和私人IP。一個或兩個客戶端可能在NAT後面。我不能依賴IPv6。C#UDP穿透沒有rendevous服務器

我遇到的問題是,一個客戶端(我們稱之爲A)必須將數據包發送給另一個(B),在A的NAT中打出一個洞並通過B的已經被打孔的NAT。但是,這要求A知道B已經穿透到B的NAT的外部端口,因爲B的NAT本地端口不能被使用。另外,B不能從它的NAT後面識別這個端口。 Visual representation of my problem 有沒有什麼辦法來辨別這個端口,或者甚至讓B告訴NAT使用哪個端口?

在此先感謝。

P.S.我正在使用.NET Unity使用版本,大約2.0。

P.P.S.如果你有一個可以與TCP協同工作的解決方案,我也會接受!

P.P.P.S.或者幾乎任何協議,而不是Http!

回答

1

您必須有一個衆所周知的公共服務器才能在兩個端點之間進行協商。

下面是在C#中很好地執行這個概念的: https://github.com/7wingfly/P2Pchat