读书人

请教:怎么一次性传输大文件

发布时间: 2012-03-31 13:13:26 作者: rapoo

请问:如何一次性传输大文件
我用的是TCP协议,并且也设置了输入、输出缓冲区
的大小为500k,我发现在internet中发送一个400多k的
文件,发送端都是一次性发送成功(我读send的返回值
与文件的大小一样),而接受端接受的数据有时是一次接收
完成,有时是两次(我也是通过获取recv函数的返回值来
确定的),请问:
1、我看书上说:用TCP协议,不管多大的文件都可以
一次性发送、接收完成吗,怎么会出现要两次才能完成呢?
2、有什么办法来使得一次性完成接收文件呢?
3、即使需要多次完成,有什么办法来判断呢?
(因为接收端不知道接收的文件有多大,所以没有判断)

[解决办法]
构造一个简单的协议, 如 “文件名 长度 文件数据 校验”,
这样接收端就有办法处理了
[解决办法]
所以一般都会在发送的包中设置序号,结束符,数据大小等来方便接收端处理
[解决办法]
还要考虑半包等传失败问题
[解决办法]
一次性传送即便可以这种方式也太草率了
应该制定传输协议分块传输
并且确定失败重传机制
[解决办法]

探讨

引用:
还要考虑半包等传失败问题

不是说用TCP协议(不是UDP协议)可以一次性发送、接收所有的数据吗?怎么会出现接收要两次
才能完成呢?

读书人网 >VC/MFC

热点推荐