gpt4 book ai didi

c - UDP 服务器,如何做到每个线程都能收到正确的客户端数据包而不是其他线程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:00 25 4
gpt4 key购买 nike

好吧,我必须在 linux 上用 C 做一个 udp 服务器。

这是我的问题,例如:我知道每个线程都会管理一个客户端。但是 recvfrom 会接受来自任何来源的数据包,那么,如何做到每个线程都会收到正确的客户端数据包而不是其他线程呢?

我希望我能很好地解释我的问题。

谢谢!

(我的意思是我的服务器将为每个想要服务的客户端创建一个新线程。所以对于 TCP,我可以使用 accept 为每个线程-客户端连接提供一个“专用”套接字,但是对于 UDP,我不能'不要做同样的事情。)

最佳答案

你不能让多个线程同时从同一个套接字读取数据。

你应该做的是:

  1. 有一个专用线程接收所有入站数据包,查看源 IP/端口,并根据需要将数据路由到适当的处理线程。

  2. 为每个处理线程提供其自己的套接字,该套接字被bind()'ed 到相同的本地 IP/端口,并被 connect()'ed 到特定的源 IP/端口,然后每个线程都可以独立调用 recvfrom(),它只会返回与线程期望的源匹配的数据包。

关于c - UDP 服务器,如何做到每个线程都能收到正确的客户端数据包而不是其他线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387873/

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