完成端口下的UDP的实现问题

lulu0515 2004-05-06 07:17:09
由于在TCP协议下,我们有WSAAccept可以做循环来侦听客户端的连接,但是在UDP协议下,我们不能使用WSAAccept这个函数来获取客户端的数据,因此我采用了WSARecvFrom来一直做循环,从而获取客户端的数据。我在使用这个函数的时候,由于SOCKET只有一个,因此一创建了服务端的SOCKET就将该SOCKET与完成端口绑定。这样做了以后,程序几乎不能运行,在WSARecvFrom循环执行以后,2500次以后,SOCKET底层就报错,错误码为10055,不知道是哪个资源没有释放,或者说,这种处理UDP下的完成端口的做法本身就不对,请各位大侠指正。
...全文
297 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lulu0515 2004-05-10
  • 打赏
  • 举报
回复
我的问题一解决,是我对UDP完成端口的理解有误,一个SOCKET,就不需要多次循环,这样可能是分页内存耗尽了吧。
alien75 2004-05-10
  • 打赏
  • 举报
回复
我觉得楼主对完成端口的理解有错误,怎么会要一直循环呢?只需要投递I/O请求-->等待触发->处理I/O结果-->再投递。

10055错误的解释是:An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
应该是你一直循环结果让非分页内存耗尽了吧。
lincoder666 2004-05-09
  • 打赏
  • 举报
回复
up
远志999 2004-05-09
  • 打赏
  • 举报
回复
用套接字做吧!
lulu0515 2004-05-09
  • 打赏
  • 举报
回复
我刚刚做出来一个UDP的完成端口,感觉挺快的,不知道,有没有人有这方面的指标。
cryptonym 2004-05-09
  • 打赏
  • 举报
回复
不会有错丫,我的udp,的完成端口运行的梃好得丫。完成端口的get...是堵塞的丫他没有接收到数据是不返回的,怎么可能会有一直循环的现象那,你是搞错了吧?
andy06001509 2004-05-09
  • 打赏
  • 举报
回复
不好意思借个地盘用一下,可别生气哟!我在服务器端用了IOCP,在一个客户端不停的发数据如循环300次,可在服务器端只接收到一百多次,不知为啥?如果我在客户端的循环里加入
Sleep(10),就可以接收到300个数据,不知原因,愿高手赐教
agent 2004-05-09
  • 打赏
  • 举报
回复
真的要使用完成端口也是可以的。在同时监听很多个数据报(UDP)的Socket时候用起来就很方便,我的是需要一台计算机开1000个Socket,大大提高了速度。基本不占多少CPU时间。
ppchen 2004-05-09
  • 打赏
  • 举报
回复
UDP没有必要用完成端口。
完成端口的优势在于多套接字时。
我什么都不用,一个UDP流量也可以达到80~90Mb
shorish 2004-05-07
  • 打赏
  • 举报
回复
完成端口是针对多连接的一个非阻塞模式
UDP?无连接 有必要用完成端口吗
建议你换个模式:重叠IO,WSAAsynSelect,WSAEventSelect都可以解决你的问题
lulu0515 2004-05-07
  • 打赏
  • 举报
回复
五一还有没有人在啊?
lulu0515 2004-05-06
  • 打赏
  • 举报
回复
有啊,完成端口的机制还是不同的,效率要高很多的。
bx2000 2004-05-06
  • 打赏
  • 举报
回复
udp没有必要用io吧

18,363

社区成员

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

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