udp使用重叠IO WSARecvFrom总返回错误WSAENOBUFS

mm_lvw 2010-08-07 02:57:16
搞了很久,实在解决不了,请大侠帮忙!!
以下是大概步骤:

//创建套接字
m_sktSer = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
//绑定
sockaddr_in LocalAddr;
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = INADDR_ANY;
LocalAddr.sin_port = htons(SERVER_PORT);
int iRet = bind(m_sktSer,(LPSOCKADDR)&LocalAddr,sizeof(LocalAddr));
if (SOCKET_ERROR == iRet)
{
closesocket(m_sktSer);
WSACleanup();
return FALSE;
}
//于是,就在以个线程里接收数据
ZeroMemory(buffer, iBufferLen);
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
0,
&dwRecv,
&dwFlag,
(sockaddr*)&senderAddr,
&SenderAddrSize,
&(pThis->m_overlapped),
NULL);
if(SOCKET_ERROR == iRet)
{
if (WSA_IO_PENDING == WSAGetLastError())
continue;
else
{
iRet = WSAGetLastError(); //问题就在这,客户端向它发送数据时,iRet就返回10055 就是错误WSAENOBUFS;
return 0;
}
}

!!!!!!!!!!!!!1求助!!!!!!!!!!
...全文
438 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Erueka 2012-02-20
  • 打赏
  • 举报
回复
这个问题就这样没果吗?我也遇到了,
liyinlei 2010-08-09
  • 打赏
  • 举报
回复
WSABUF wsabuf;
wsabuf.buf 需要分配内存

char buffer[1024]={0};
wsabuf.buf = buffer;
wsabuf.len = 1024;
Eleven 2010-08-09
  • 打赏
  • 举报
回复
你的wsabuf分配空间了没有?
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chexlong 的回复:]
完成端口投递接收消息WSARecv总会收到WSAENOBUFS
http://topic.csdn.net/t/20050516/22/4011884.html
[/Quote]

chexlong,你好,看了你给我的网址,贴上面所说的比较难理解,不知我是否理解正确!

意思是说如果遇WSAENOBUFS的返回值,可以调用一个带空缓冲区的recevie操作,也就是用没有分配空间的WSABUF作为参数传递给WSARecvFrom调用一次,以便存在内存被解锁,然后再调用WSARecvFrom获取数据。是这样吗?

我试过了,问题还是不能解决!
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 visualeleven 的回复:]
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
0,
-->
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
1,
[/Quote]

试了,没用,我之前是1的,后来设成0,还是不行!还是返回那个错误!
Eleven 2010-08-09
  • 打赏
  • 举报
回复
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
0,
-->
int iRet = WSARecvFrom(pThis->m_sktSer,
&wsabuf,
1,
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liyinlei 的回复:]
WSABUF wsabuf;
wsabuf.buf 需要分配内存

char buffer[1024]={0};
wsabuf.buf = buffer;
wsabuf.len = 1024;
[/Quote]

恩,我的代码跟你的一样,也是这样分配了空间的,但还是一样会返回那个错误!
mm_lvw 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]
你的wsabuf分配空间了没有?
[/Quote]

分配了,就像4楼那样,已经已经分配了,但还是那样!
玉古云投 2010-08-07
  • 打赏
  • 举报
回复
完成端口投递接收消息WSARecv总会收到WSAENOBUFS
http://topic.csdn.net/t/20050516/22/4011884.html
源码链接: https://pan.quark.cn/s/a4b39357ea24 微信小程序是由腾讯公司设计的一种轻量级应用开发平台,主要面向移动设备,旨在为用户带来无需下载安装即可直接使用的应用服务体验。在微信小程序的开发实践中,"模仿美团菜单 swiper分类菜单"是一项常见的技术应用,其目的是达成与美团外卖应用相似的交互模式,使用户能够轻松地浏览和挑选各种商品或服务。 在微信小程序的技术体系中,`swiper`组件属于轮播图功能模块,通常用于呈现多张图片或卡片式的切换界面,能够达成动态滑动展示不同分类菜单的功能。在模拟美团菜单的应用情境下,`swiper`组件一般与`swiper-item`组件协同工作,每一个`swiper-item`对应一个分类,用户可通过左右滑动来切换不同的分类菜单。 为了达成这样的功能,首先需要在微信小程序的`json`配置文档中引入`swiper`组件,并在`wxml`结构文档中构建相应的布局代码,将每个分类以`swiper-item`的形式进行组织。同时,需要在`wxss`样式文档中定义恰当的样式,保证分类菜单的视觉呈现符合设计规范。 接下来,我们将在`js`逻辑文档中处理`swiper`的切换逻辑,通过监听`bindchange`事件来识别当前选中的分类,并根据这一信息动态获取对应的子菜单信息。为了达成类似美团的层级菜单功能,可能还需要借助`picker`或`navigator`组件来展示二级分类或商品详情。 在开发阶段,需要关注以下关键点: 1. 数据绑定:保证数据与界面之间的双向链接准确无误,以便在选择分类时即时更新显示内容。 2. 动态加载:针对大量数据,可能需要采取异步加载机制,防止一次性加载过多内容引发性能瓶颈...
代码下载地址: https://pan.quark.cn/s/72bd50ecb2fb 《微信飞机大战素材详解》 微信飞机大战作为一款广受欢迎的休闲游戏,凭借其便捷的操作方式和紧张刺激的游戏过程,赢得了众多用户的青睐。本文将系统性地剖析这款游戏的关键素材,旨在帮助开发者全面掌握游戏的设计理念与实现方法。 我们聚焦于游戏的核心构成——"AirplaneResource"。此名称一般指向游戏资源库,其中收纳了游戏中所有的视觉素材、音频资料以及动画元素。在微信飞机大战的语境下,这些资源构成了游戏画面呈现、音效播放和动态效果的基础。 1. **图像素材**:游戏中的飞机造型、敌方单位、弹药以及爆炸效果等视觉元素,均以图像素材的形式进行展示。图像素材通常涵盖PNG或JPG格式的静态图片,也包括GIF或APNG格式的动态图片。开发者需要细致地设计并优化这些图像,确保在各种设备上都能实现流畅的渲染,同时维持视觉表现力。 2. **声音素材**:游戏的背景音乐、射击音效、爆炸声等音频片段,对于构建游戏氛围具有决定性作用。这些音频文件可能以MP3、WAV或OGG格式进行存储,开发者需要权衡音频的压缩程度与音质,以确保在不牺牲游戏体验的前提下,有效控制文件体积。 3. **动画序列**:飞机的飞行轨迹、攻击动作、爆炸过程等动态表现,通常借助序列帧动画技术实现。这些序列帧图片组合而成的动画,通过编程控制播放速率和顺序,为游戏增添生动的动态效果。 4. **物理接触判定**:游戏中飞机与弹药之间的接触判定,是通过算法完成的。开发者可能会采用基础的矩形接触判定或更精密的像素级接触判定,以保证游戏的公平性和挑战性。 5. **游戏规则**:微信飞机大战的得分机制、生命值系统、敌机生成逻辑等...

18,356

社区成员

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

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