WSAAsyncSelect中,怎么样保证接收数据完整?
代码是这样:case FD_READ:
char szText[102400] = { 0 };
memset(szText,0,102400);
::recv(s, szText, 10240, 0);
我发的包有10000字左右,
但只能收到部分,我怎么做才能保证完整性呢
代码是这样:case FD_READ:
char szText[102400] = { 0 };
memset(szText,0,102400);
::recv(s, szText, 10240, 0);
我发的包有10000字左右,
但只能收到部分,我怎么做才能保证完整性呢
解决方案 »
- 运算结果超出类型的取值上限 怎么解决 在线等
- 关于shell扩展编程与com组件实现右键菜单(及联菜单)
- 如何实现对话框的客户区透明
- 主程序里怎么判断是否还有线程在执行?如何强行终止它?
- 如何设置服务让服务不能被杀掉?设置系统依赖吗?如何做,急呀
- 用socket编程,为何我的程序老是死掉,请大家帮我看看,帮我解决一些弱智的问题!
- 高分求教怎样实现控件编辑功能,类似源代码?
- 如何去除Google搜索自动填充下拉列表?
- 请尽可能多地指教,木马病毒一般会调用哪些系统关键的API
- VC++是可视化的工具吗?能象VB或DELPHI那样吗?以后的新版本有没有可视化的可能性?
- IP转发或者说是IP代理
- 100分难题:为何我的socket 在本机上 send 到 recieve 的时候有 4 到 20 ms 的延时?
那么接受自然一次就搞不定了,反复接受几次,如果是TCP的肯定能收齐。经验如此,如有不对,欢迎指正!
详见MSDN
If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
int rec = 0;
int total = 10240;
while(total!= 0)
{
rec = recv(s,szText+left,total,0 );
left += rec;
total -=rec;
}