我想用udp socket来传输大文件(大于64k),因为一个udp包的最大数据长度是64k.请问我需不需要再传输的时候,将文件分成64k一下的包,然后再接收端组包?有人说不用,socket会自动的将大于64k文件分成几个udp包,接收端自动的将几个udp包组成一个文件.请问请问我需不需要再传输的时候,将文件分成64k一下的包,然后再接收端组包?
解决方案 »
- DLL文件可以直接从内存中导入吗
- 如何将桌面的exe图标拖动到CListCtrl里面,谢谢
- 请问一个奇怪的ADO数据库的连接ACCESS出错问题。高手们请进,救救我把。。。。
- 如何让CMSFlexGrid中指定的单元格中字体有中划线?
- 请教:获取wm_copydata消息是否只能重载oncopydata处理数据,回答就给分
- “关于控件的问题!!”
- 特来VC龙潭请教,请进!请进!
- 关于makefile工程的简单问题,高手不在话下
- 一个sniffer程序中有关WSARecv和CWinThread的问题——非常怪的问题
- VS2008添加变量向导是空白的
- 用spi过滤html的问题
- 求教?如何用udp实现稳定可靠的数据传输阿。
应该看你用什么层次的编程接口吧。
记得《windows网络编程》里面 是要自己分的。
大概的算法是这样:
#dedinf MAXBUF 4000char buf[MAXBUF];
//fill buffer with nlen byte
while(nlen>0){
int n =send(buf,sock.....);
nlen-=n;
buf+=nlen;
}
typedef struct _Data
{
int iType; // 包的消息类型
int iNum; // 包的编号
char* caData; // 实际发送的数据
}DATA;发包的时候,指定一种数据类型,如:0;
依次把包分成64份,并发出;
发送完后,可以用另一种消息类型,如:1来标志包已全部发完;
接收端根据编号组包;
如果有丢包,通知发送放重新发送;
循环上述过程... ...
因为udp是不可靠的协议, 接收的时候,是按包接收,而这个包,是driver 发的包,
如果你发的包大于driver 的buffer, 那它会自动分包,如果你 有一个收不到,你就不知道是那个了。
特别是在internet 的状况下 ,丢包机会会更大
不过如果你的UDP传输也是可靠的(需要自己实现),那也可以使用UDP。但是麻烦一些。
然后考虑用UDP实现可靠文件传输
http://hackangel.go1.icpcn.com/lilisoft/UDPTrsmtFile.rar
这个是个例子