免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12630 | 回复: 2
打印 上一主题 下一主题

udp 如何利用SELECT监听多个UDP客户端。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-09 18:38 |只看该作者 |倒序浏览
目的:
如果服务器建了一个UDPSOCKET我想用这个SOCKET,然后用SELECT监听,每当UDP客户端发数据过来时,把这个客户端加入文件描述符集中,监听它。过来一个客户端就把它加入文件描符述集中,然后监听。如此,有数据SELECT就返回,无数据就阻塞在SELECT上,请问可以实现吗?
步聚:
SELECT读文件描符集中初始为服务器SOCKET。
UDP是无联接的,当SELECT返回时,说明服务器端SOCKET收到客户数据,但是此时我只能调用recvfrom接收数据,而不能像TCP那样调用ACCEPT返回一个文件描符符,然后再把它放到监听文件描符集中,让SELECT监听。
所以要想让服务器端SOCKET监听多个UDP客户端如何实现呢?
问题所在是,UDP是无联接的, 我们好像是不能返回UDP客户端的描述符,所以无法监听多个UDP。
请问一下是这样的吗?UDP SELECT 返回时,我们可以调用ACCEPT返回涛接字吗?

论坛徽章:
0
2 [报告]
发表于 2009-11-09 19:35 |只看该作者

回复 #1 helun 的帖子

建议你还是先找一本socket编程的书看看吧,你对udp的通信方式还不是很了解。udp是无连接的,而且udp的服务器是往自己的socket上读写,根本不需要知道客户端的socket。所以即使你得到了客户端的socket,又有什么用呢?
如果你在服务器上只开一个端口来监听的话,你通过select这种方式是无法辨别哪个客户端给你发的数据,除非,每个客服端发来的数据都提供一个header在数据包开始,服务器通过这个header判断是哪个客户端发送来的数据。

总之,对于udp来说,如果实现多客户端监听,还是建议为每个客户端开一个端口。

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
3 [报告]
发表于 2009-11-21 16:49 |只看该作者
看看 <<Network Programming Volume 1 3rd>>

22.7 Concurrent UDP Servers
22.7 并发UDP服务
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP