问题提出背景:
我想实现文件的等比例传输,就是以每次多少节发送就以多少字节接收。10K以下发送接收都没有问题,超过10K的话,发送正常,但接收端在处理第一个包的时候出现一个奇怪的现象:第一次接收大部分内容,剩下的会在第二次中接收,这两次接收到的恰好是发送的第一个分包内容。更奇怪的是后面的分包发送接收又正常了!个人猜测:
第一次发送的数据在没有完全写入缓冲区前就调用了Receive接收,所以数据不全。而在刚接收完之后没有写入的数据进来了(发送端的Send并没有再次调用前),Receive再次响应将第一个分包剩下内容接收完毕。而至于后面的分包发送接收正常大概也跟时间差有关系。所以我想到通过判断Socket缓冲区中含有的字节数来决定是否接收,这样就可以保证等比例接收了。不知道能否实现,请高人指点!
我想实现文件的等比例传输,就是以每次多少节发送就以多少字节接收。10K以下发送接收都没有问题,超过10K的话,发送正常,但接收端在处理第一个包的时候出现一个奇怪的现象:第一次接收大部分内容,剩下的会在第二次中接收,这两次接收到的恰好是发送的第一个分包内容。更奇怪的是后面的分包发送接收又正常了!个人猜测:
第一次发送的数据在没有完全写入缓冲区前就调用了Receive接收,所以数据不全。而在刚接收完之后没有写入的数据进来了(发送端的Send并没有再次调用前),Receive再次响应将第一个分包剩下内容接收完毕。而至于后面的分包发送接收正常大概也跟时间差有关系。所以我想到通过判断Socket缓冲区中含有的字节数来决定是否接收,这样就可以保证等比例接收了。不知道能否实现,请高人指点!
解决方案 »
- WAVE 文件保存
- error LNK2005的问题。
- 题如:查找出title中包含字符串“Web”....在线跪求
- 为什么我自己建立的对话框不能显示?
- X联盟 -- 讨论可行性及联盟方式(一个狂热程序员的邀请)
- 请问如何用鼠标在一幅图上选定多个区域???
- 用GetBitmapBits和SetBitmapBits改变图像像素
- 40分!!!!大赠送!请教一个SHAREWARE的问题!!!!
- 不能传递CArray类型的参数!
- 在VC++6的MFC。EXE下用WINSOCK的SIO-RECVALL命令该用何头文件????
- 如何高效干净地弹出盘符
- 我建了个select模式 但是Client端的可读却一直进不去 大虾看看
这思路我有想过,以字节流传输的话判断处理还好办。
如果我要对文件数据进行打包[文件包序列号,文件包长度,文件包内容]传输的话好像不好处理,能给点提示不?
while(1)
{
int nRev = Receive(buff,1024,0);
if(nRev <0)
{
return;
}
...
}
Socket没这功能,想变通的方法吧,就算每次发送不超过10K也有可能接收时分在两个接收包里的,
按楼上的方法做吧