Protocol recommendation for Peer to Peer File Tran

2019-09-02 20:09发布

I need to implement a Peer To Peer File Transfer.

What protocol should I use? TCP or UDP? And why?

5条回答
够拽才男人
2楼-- · 2019-09-02 20:32

TCP is generically the best way to go when you want to ensure that your data gets to its intended destination with appropriate integrity.

In your case I would personnally choose tcp, because you will probably end up reimplementing tcp in some form inside of your udp packets otherwise (ask for block (syn), answer: i have block (syn ack), ok send it to me (ack)...data: (push ack)... ok done: (rst))

Also generically speaking, udp is the way to go when you want to broadcast, and you dont really care if the data gets there or not, meaning there is either high redundancy or low importance/integrity... since files require high integrity, it doesn't make a lot of sense to go UDP, again, unless you want to go through the extra work.

The only upside to udp would be the fact that is stateless, which could have some good implementations in a file sharing program.

Bottom line... go with your heart...

查看更多
乱世女痞
3楼-- · 2019-09-02 20:33

TCP helps ensure that your packets are received by the client and should be your choice for a file transfer because you want the file to be reproducible on the other end exactly as it is sent.

You can implement the file transfer using UDP too, but you would have to write your own logic for ensuring that the contents of the file are assembled correctly.

查看更多
我想做一个坏孩纸
4楼-- · 2019-09-02 20:35

Since most users really care that all of their data makes it to the remote target with consistency, TCP is your best bet since packet error handling is managed. UDP is typically better for applications where loss is acceptable (e.g. player position in games) or where retransmission is not an option (e.g. streaming audio/video).

More on streaming

In the streaming A/V case, the data is always shipped with some error correction bits to fix some large percentage of errors. The endpoint manages the extra time required to detect (and potentially correct) the errors by buffering the stream. Nevertheless, it's obviously a ton of work (on both sides) to make it all happen and probably isn't worth it for P2P file transfer.

Update 1: audio streaming comment

The constraints are really based on required throughput, latency, and bit error rate (BER). Since these are likely both mobile devices, possibly operating across two carriers cellular networks, I'd opt for UDP with very high error-correction capability for audio. Users will likely be more displeased with no audio versus slightly corrupted audio and greater latency. Nevertheless, I would still use TCP for file transfer.

查看更多
疯言疯语
5楼-- · 2019-09-02 20:51

I'd recommend using TCP.

If you use UDP then you end up having to design and implement flow control and detection / retransmission of lost packets in your application-level protocol. Doing this in a way that gives you decent performance in good and bad networking conditions is hard work. For simple peer to peer, the payoff is generally not worth the effort.

FOLLOWUP

You ask:

and i plan to implement inter-lan calling over wifi, for that i would have to use UDP right?

Assuming that IP is implemented and the routing is set up correctly over your WiFi network(s), both UDP and TCP should work just fine.

查看更多
来,给爷笑一个
6楼-- · 2019-09-02 20:54

UDP does not guarantee that the packets will be delivered, which is something that TCP does. Please take a look at this previous SO post which highlights the difference between these two protocols.

查看更多
登录 后发表回答