我正在为 TCP 流寻找可靠的 STUN 解决方案。我尝试过 STUNT(美国康奈尔大学)和 XSTUNT(台湾大学)。但它们都显得老旧无用。
我想要做的是通过 C# 在两个不同网络中的两个客户端之间传输文件。如果您对以下任何一项有任何解决方案,请告诉我: 1- C# 的基于 UDP 的客户端/服务器解决方案 2- 任何基于 TCP 的 STUN 服务器
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 遍历的答案合并。