2016-05-18 30 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