(急)Socket 接收失败错误10035

yunzhao2046 2009-04-19 07:52:18
各位大侠帮帮忙
接收端采用的异步接收方式
代码如下:
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE,60000);
void* lpBuf = GlobalLock(hGlobal);
DWORD dword;
DWORD dwflag=0;
//Sleep(10);
//DWORD size= recv(m_socket,(char*)lpBuf,60000,0); //m_pClient->Receive(lpBuf,60000);
DWORD size=WSARecv(m_socket,(WSABUF*)lpBuf,1,&dword,&dwflag,NULL,NULL);

if(size == SOCKET_ERROR)
{
CString str;
str.Format("接收数据失败,错误码:%d",WSAGetLastError());
MessageBox(str);
return;
}
...全文
427 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maojsh2002 2010-01-28
  • 打赏
  • 举报
回复
缓冲区写大点再试试
yunzhao2046 2009-04-20
  • 打赏
  • 举报
回复
我是看有个教程里面的异步编程,把lpOverlapped参数设为NULL的我
他那个没有出错
stjay 2009-04-19
  • 打赏
  • 举报
回复
不是随便WSARecv、WSASend就是异步
lpOverlapped参数为NULL时等同于recv、send
arong1234 2009-04-19
  • 打赏
  • 举报
回复
你这个代码虽然把socket设置为异步,但是你的接收代码还是同步方式的,异步和同步是完全不一样的,处理代码也完全不一样。建议找一些现成的示例先看看,这绝对不是只改一下模式就足够的
arong1234 2009-04-19
  • 打赏
  • 举报
回复
WSAEWOULDBLOCK(10035)其实不是一个错误,只是告诉你当你在用异步socket收发数据时,由于发送线路已经满了,你需要等等再发。如果是发送(send)时收到,则你需要在OnSend时再发。如果是接收时,则再OnRecv时再收
D0ckLng 2009-04-19
  • 打赏
  • 举报
回复
返回值含义:若无错误发生且接收操作立即完成,则WSARecv()函数返回所接收的字节数。
接收操作立即完成是比较难的.所以很容易得到10035 表示阻塞状态.
异步套接字的话不应该过多关注函数的返回值,而应关注与接收相关的通知消息.
annvily 2009-04-19
  • 打赏
  • 举报
回复
缓冲区满了

18,356

社区成员

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

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