Stuntman是支持TCP STUN的STUN服务器。
www.stunprotocol.org
在该站点上,有一些指向一些示例代码的链接,包括客户端库的C#实现。大多数都是针对UDP的,但是您只需做一点工作,就可以通过修改现有UDP代码库之一来为TCP STUN扮演自己的C#代码。
之后,您仍然需要实施信令服务来交换地址候选者(直接或通过STUN获得)并进行自己的类似于ICE的连接检查。
对于TCP,简单的解决方案是使两个端点都使用两个套接字。一个套接字或侦听套接字,另一个用于连接-但这两个套接字共享相同的本地端口(ala SO_REUSEADDR套接字选项)。
另一种解决方案是让每个端点仅使用一个套接字。两个端点都反复尝试进行TCP同时连接。如果NAT表现良好,则可以建立连接。
NAT遍历,尤其是TCP NAT遍历,并不是一门精确的科学。在某些情况下,总是存在两个端点无法直接连接的情况,或者必须回落到UDP和/或通过诸如TURN之类的中继解决方案。
将以上所有信息与我去年在此处编写的有关基本P2P / NAT遍历的答案合并。