gpt4 book ai didi

c - 有 UDP 套接字时如何使用选择功能

转载 作者:行者123 更新时间:2023-12-04 05:32:44 26 4
gpt4 key购买 nike

我想制作一个多客户端 - 一个服务器测验应用程序。在这种情况下,首先,客户端将连接到服务器并注册自己。然后,服务器将向已注册到服务器的每个客户端多播一个问题。然后客户端将响应答案,该答案将仅发送到服务器。然后服务器会将每个客户端的分数发送给相应的客户端。
这就是我在上述应用程序中尝试做的事情 -
1. 我也有multicast ,这就是为什么我将我的服务器套接字设置为 SOCK_DGRAM (即,UDP)。然后我使用 CLASS-D ip 地址,用于创建一个组(服务器将多播到哪个组)。然后是使用setsockopt ,我正在将客户添加到此组,以便他们可以收到问题。
2.因为想听听所有客户的回答,所以想用select .它使用套接字描述符在各个客户端之间进行选择,以了解哪些客户端可以读取。
但问题是,当我使用 SOCK_DGRAM 套接字时,它不执行 listenaccept功能。所以,我不会得到套接字描述符(由 accept 返回)。这就是为什么,我将无法使用 select (因为它只使用文件描述符)。
那么,我该如何继续,因为我想使用 UDP 功能 - MULTICASTING 以及 TCP 功能 - 每个连接的套接字描述符。

最佳答案

即使使用 UDP 和未连接的套接字,您仍然可以使用 select 等函数.只需将服务器套接字绑定(bind)到一个地址,并将该套接字用于 select .当套接字可读时,客户端已经发送了一些东西,例如sendto你可以做例如recvfrom .

但是,我真的建议您使用 TCP 套接字,它会使很多事情变得更简单,尤其是在通信协议(protocol)方面(请记住,UDP 包可能会丢失或乱序,您必须自己处理)。

关于c - 有 UDP 套接字时如何使用选择功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12368118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com