file - 通过互联网发送文件的可靠方式

标签 file tcp udp ip transfer

首先:我不确定这是问的正确地方,但我认为这个问题比 super 用户或服务器故障更适合这里,因为这是从程序员的角度来看的问题:我认为更多的程序员可能有同样的问题(虽然我找不到这个具体问题!)。

我想在我的程序中添加一个功能,允许用户将文件发送给“ friend ”。您可以通过用户名找到 friend :这一切都通过可以提供 friend IP 地址的服务器进行。 我想使用 tcp 连接来发送文件。然而,当一方(或双方)位于 NAT 之后时,这就变得困难了。解决这个问题的最佳方法是什么?我听说可以通过服务器发送内容,但我宁愿直接发送所有内容,以避免服务器开销。

我听说过一种叫做打洞的技术,但它实现起来相当复杂,而且不是 100% 可靠。我可以使用 UDP 并实现一些方案来提高可靠性,但这对我来说似乎有点复杂。我知道 skype、bittorrent 和很多其他程序都做类似的事情(但我不知 Prop 体细节,他们使用哪种协议(protocol),是否使用打洞等)。

我稍微研究了一下 FTP,直到我意识到这只是一个使用 TCP 的协议(protocol),所以我应该使用 TCP 打洞来让它工作......无论如何,我希望有人能给我一些建议:)

最佳答案

如果你不想让数据通过服务器,我不知道除了 TCP Hole Punching 之外的其他方法。或简单 Port forwarding先前选择的端口。

关于file - 通过互联网发送文件的可靠方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299807/

相关文章:

c - UDP 服务器,如何做到每个线程都能收到正确的客户端数据包而不是其他线程?

ruby-on-rails - Rails.root 文件路径通配符

python服务器程序cpu使用率高

networking - TCP 是在每个数据包上发送 SYN/ACK 还是仅在第一个连接上发送?

javascript - 如何在 Node.js 中的同一进程内监听同一地址上的不同 UDP 端口

algorithm - 什么是好的 UDP 超时和重试值?

file - Golang 群文件锁定抛出 panic : runtime error: invalid memory address or nil pointer dereference

C# FileInfo - 查找重复文件

windows - Windows 和 Git 的非法文件名问题

sockets - SO_RCVBUF怎么会比TCP接收窗口小呢? (Windows XP)