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

lulu0515 2004-05-06 07:17:09
由于在TCP协议下,我们有WSAAccept可以做循环来侦听客户端的连接,但是在UDP协议下,我们不能使用WSAAccept这个函数来获取客户端的数据,因此我采用了WSARecvFrom来一直做循环,从而获取客户端的数据。我在使用这个函数的时候,由于SOCKET只有一个,因此一创建了服务端的SOCKET就将该SOCKET与完成端口绑定。这样做了以后,程序几乎不能运行,在WSARecvFrom循环执行以后,2500次以后,SOCKET底层就报错,错误码为10055,不知道是哪个资源没有释放,或者说,这种处理UDP下的完成端口的做法本身就不对,请各位大侠指正。
...全文
206 13 点赞 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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.
应该是你一直循环结果让非分页内存耗尽了吧。
  • 打赏
  • 举报
回复
linzcode 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吧
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程
加入

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2004-05-06 07:17
社区公告
暂无公告