是否可以在两个位于不同 NAT 后面的客户端之间建立直接连接?当然,我意识到在某种程度上,具有公共 IP 的服务器将是必不可少的,但我不希望它成为代理。看看下面的场景:
- 我不想与配置网络设备有任何关系。我只想在代码中做到这一点。
- 我不希望服务器参与文件传输过程(出于性能原因)
- 我们有:客户端 A、客户端 B 和服务器 S,它看起来有点像这样:
A--[Router1]--S--[Router2]--B
- A连接S并授权
- B连接S并授权
- A想向B发送文件
- A 向 S 请求与 B 的连接
- S [这里有魔法吗] 现在 A 与 B 有联系
- A开始发送文件
- S 下降(或至少文件传输绕过是)
- A和B之间仍然存在联系
- A继续向B发送文件
我的问题:
- 那可能吗?
- 这个怎么做?
- 有没有遇到可以做到这一点的示例项目?
我找到了WCF / WPF Chat Application,但结果证明它是一个代理。
我还发现了一些建议使用 UPnP 和 NAT Traversal 的帖子,但没有人直接回答我的第一个问题,所以我没有深入研究它。