Chinaunix

标题: udp 如何利用SELECT监听多个UDP客户端。 [打印本页]

作者: helun    时间: 2009-11-09 18:38
标题: udp 如何利用SELECT监听多个UDP客户端。
目的:
如果服务器建了一个UDPSOCKET我想用这个SOCKET,然后用SELECT监听,每当UDP客户端发数据过来时,把这个客户端加入文件描述符集中,监听它。过来一个客户端就把它加入文件描符述集中,然后监听。如此,有数据SELECT就返回,无数据就阻塞在SELECT上,请问可以实现吗?
步聚:
SELECT读文件描符集中初始为服务器SOCKET。
UDP是无联接的,当SELECT返回时,说明服务器端SOCKET收到客户数据,但是此时我只能调用recvfrom接收数据,而不能像TCP那样调用ACCEPT返回一个文件描符符,然后再把它放到监听文件描符集中,让SELECT监听。
所以要想让服务器端SOCKET监听多个UDP客户端如何实现呢?
问题所在是,UDP是无联接的, 我们好像是不能返回UDP客户端的描述符,所以无法监听多个UDP。
请问一下是这样的吗?UDP SELECT 返回时,我们可以调用ACCEPT返回涛接字吗?
作者: buaadallas    时间: 2009-11-09 19:35
标题: 回复 #1 helun 的帖子
建议你还是先找一本socket编程的书看看吧,你对udp的通信方式还不是很了解。udp是无连接的,而且udp的服务器是往自己的socket上读写,根本不需要知道客户端的socket。所以即使你得到了客户端的socket,又有什么用呢?
如果你在服务器上只开一个端口来监听的话,你通过select这种方式是无法辨别哪个客户端给你发的数据,除非,每个客服端发来的数据都提供一个header在数据包开始,服务器通过这个header判断是哪个客户端发送来的数据。

总之,对于udp来说,如果实现多客户端监听,还是建议为每个客户端开一个端口。
作者: yjh777    时间: 2009-11-21 16:49
看看 <<Network Programming Volume 1 3rd>>

22.7 Concurrent UDP Servers
22.7 并发UDP服务




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2