WSARecv函数有接受数据,但是返回的数据长度是0

jiangfeng999 2009-07-03 09:27:15
我用异步的模式接收http请求,在send完一个http请求之后,用WSARecv接收服务器的响应.奇怪的是有时候WSARecv函数返回后m_pHttpContent有内容,但是dwRecvBytes的返回值却是0.不知道为什么

memset(sHttpReqest,0,sizeof(sHttpReqest));
sprintf(sHttpReqest,"GET %s HTTP/1.1\r\nAccept:*/*\r\nAccept-Language:zh-cn\r\n",pHttpUrl,HTTP_VERSION);
sprintf(sHttpReqest,"%sUser-Agent:Mozilla/4.0 (compatible;MSIE 7.0;Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n",sHttpReqest);
sprintf(sHttpReqest,"%sHost:%s\r\n",sHttpReqest,sHostName);
sprintf(sHttpReqest,"%sConnection: Keep-Alive\r\n\r\n",sHttpReqest);
nRet = send(m_hSocket,sHttpReqest,strlen(sHttpReqest),0);
fprintf(stderr,"成功发送到%s的请求\n",pHttpUrl);
if(nRet==SOCKET_ERROR)
{
//异常处理
}

DWORD dwRecvBytes=0;
DWORD Flags=0;

m_WsaBufHttpRecv.buf = m_pHttpContent+m_dwTotalBytesRecv;
m_WsaBufHttpRecv.len = 8192;
nRet = WSARecv(m_hSocket,&m_WsaBufHttpRecv,1,&dwRecvBytes,&Flags,&m_Overlapped,NULL);
...全文
122 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly1140 2009-07-03
  • 打赏
  • 举报
回复
判断 nRet 值, 如果是 SOCKET_ERROR 并且 WSAGetLastError 返回 WSA_IO_PENDING, 代表重叠还在进行, Overlapped operations will complete later. 在这种情况下, dwRecvBytes是不会被更新的, 还是0.
所以你需要检查一下

18,356

社区成员

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

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