关于 WSARecv 接收数据的问题?

AIQ. 2013-10-17 04:32:02
请问如何保证包的完整性?有时候只接到一半数据,我在网上有看到包头定大小,判断实际接收字节不匹配就继续接受, 但是我那么写第二次接收完就被挂起了,应该是我理解错了,求指点迷津, 能给出具体过程代码那就太感谢了!

DWORD nRecvBytes = 0, nFlags = 0;
WSABUF DataBuf;

DataBuf.len = sizeof(nPack);
DataBuf.buf = (char*)&nPack;

return WSARecv( nSocket, &DataBuf, 1, &nRecvBytes, &nFlags, 0, 0 );



这是我接收的代码,大家看看有什么问题。
...全文
726 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyingbo 2013-10-23
  • 打赏
  • 举报
回复
引用 5 楼 luosixiang5 的回复:
引用 3 楼 Q342210738 的回复:
WSARecv函数放在while循环里面调用
是while循环里调用, 有个while调用这个函数
循环接收不会出现
引用
但是我那么写第二次接收完就被挂起了
这种情况的吧。。。
Eleven 2013-10-23
  • 打赏
  • 举报
回复
循环接收啊,检测WSARecv返回的长度信息
AIQ. 2013-10-23
  • 打赏
  • 举报
回复
引用 4 楼 felitsar 的回复:
WSARecv投递读操作后,要在GetQueuedCompletionStatus获取你读操作的结果 如果接到的字节数比你预期的少,可以再投递一个WSARecv接收余下的部分 异步IO模型下,接收函数不适合包装,因为返回值不具有太大意义
谢谢, 我试试看。
AIQ. 2013-10-23
  • 打赏
  • 举报
回复
引用 3 楼 Q342210738 的回复:
WSARecv函数放在while循环里面调用
是while循环里调用, 有个while调用这个函数
felitsar 2013-10-22
  • 打赏
  • 举报
回复
WSARecv投递读操作后,要在GetQueuedCompletionStatus获取你读操作的结果 如果接到的字节数比你预期的少,可以再投递一个WSARecv接收余下的部分 异步IO模型下,接收函数不适合包装,因为返回值不具有太大意义
lyingbo 2013-10-21
  • 打赏
  • 举报
回复
WSARecv函数放在while循环里面调用
AIQ. 2013-10-21
  • 打赏
  • 举报
回复
没人吗?????????
AIQ. 2013-10-17
  • 打赏
  • 举报
回复
这是封装的Recv函数

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧