首先:我不确定这是问的正确地方,但我认为这个问题比超级用户或服务器故障更适合这里,因为这是从程序员的角度来看的问题:我认为更多的程序员可能有同样的问题(虽然我找不到这个特定的问题!)。
我想在我的程序中有一个功能,允许用户将文件发送给“朋友”。您可以通过用户名找到朋友:这一切都通过可以提供朋友 IP 地址的服务器进行。我想使用 tcp 连接来发送文件。然而,当一方(或双方)在 NAT 之后时,这变得很困难。解决这个问题的最佳方法是什么?我听说可以通过服务器发送东西,但我宁愿直接发送所有东西,以防止服务器开销。
我听说过一种叫做打孔的技术,但它的实现非常复杂,而且不是 100% 可靠的。我可以使用 UDP 并实施一些方案来提高可靠性,但这对我来说似乎有点复杂。我知道 Skype、bittorrent 和许多其他程序做类似的事情(但我不知道具体细节,他们使用哪种协议,如果他们使用打孔等)。
我稍微研究了一下 FTP,直到我意识到这只是一个使用 TCP 的协议,所以我应该使用 TCP 打孔来让它工作......无论如何,我希望有人能给我一些建议:)