【发布时间】:2015-07-09 20:16:42
【问题描述】:
是否可以在两个位于不同 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 的帖子,但没有人直接回答我的第一个问题,所以我没有深入研究。
【问题讨论】: