对等文件传输的协议建议

时间:2012-01-06 07:02:30

标签: java sockets tcp udp

我需要实现点对点文件传输。

我应该使用什么协议? TCP还是UDP?为什么?

5 个答案:

答案 0 :(得分:3)

当您希望确保数据以适当的完整性到达目标目的地时,TCP通常是最佳方式。

在你的情况下,我会个人选择tcp,因为你可能最终会在你的udp数据包内以某种形式重新实现tcp,否则(请求阻止(syn),回答:我有阻止(syn ack),确定发送它对我(ack)...数据:(推送确认)......确定完成:( rst))

一般来说,udp是你想要广播的方式,而你并不关心数据是否存在,这意味着存在高冗余或低重要性/完整性......因为文件需要很高完整性,除了你想要完成额外的工作之外,再次使用UDP并没有多大意义。

udp的唯一优势是无状态,这可能在文件共享程序中有一些很好的实现。

底线......随心所欲......

答案 1 :(得分:1)

我建议使用TCP。

如果使用UDP,则最终必须在应用程序级协议中设计和实现丢失数据包的流量控制和检测/重传。这样做可以在良好和糟糕的网络条件下提供良好的性能,这是一项艰苦的工作。对于简单的点对点,收益通常是不值得的。

<强>后续

你问:

  

我计划通过wifi实现LAN间呼叫,因为我必须使用UDP吗?

假设已实施IP并且通过WiFi网络正确设置了路由,UDP和TCP都可以正常工作。

答案 2 :(得分:0)

UDP不保证将传送数据包,这是TCP所做的事情。请查看this之前的SO帖子,其中突出显示了这两个协议之间的区别。

答案 3 :(得分:0)

TCP有助于确保客户端收到您的数据包,并且您应该选择进行文件传输,因为您希望文件在另一端完全可以在发送时再现。

您也可以使用UDP实现文件传输,但您必须编写自己的逻辑以确保正确汇编文件的内容。

答案 4 :(得分:0)

由于大多数用户确实非常关心他们的所有数据是否与远程目标保持一致,因此TCP是最好的选择,因为管理数据包错误处理。 UDP通常更适用于损失可接受的应用(例如游戏中的玩家位置)或重传不是一种选择(例如流音频/视频)。

有关流媒体的更多信息

在流式A / V情况下,数据总是随附一些纠错位以修复一些大部分错误。端点通过缓冲流来管理检测(并可能纠正)错误所需的额外时间。然而,显然有很多工作(双方都要)使这一切发生,并且可能不值得进行P2P文件传输。

更新1:音频流评论

约束实际上基于所需的吞吐量,延迟和误码率(BER)。由于这些可能都是移动设备,可能在两个运营商蜂窝网络上运行,因此我选择具有非常高的音频纠错能力的UDP。用户可能会对没有音频而不是轻微损坏的音频和更大的延迟感到不满。不过,我仍然会使用TCP进行文件传输。