Mar*_*ino 1 c sockets linux udp
好吧,我必须在 linux 上用 C 语言做一个 udp 服务器。
这是我的问题,例如:我让每个线程都管理一个客户端。但是 recvfrom 将接受来自任何来源的数据包,那么,如何让每个线程接收正确的客户端数据包而不是其他线程呢?
我希望我能很好地解释我的问题。
谢谢!
(我的意思是我的服务器将为每个想要提供服务的客户端创建一个新线程。所以使用 TCP 我可以使用 accept 为每个线程客户端连接提供一个“专用”套接字,但是使用 UDP 我不能这样做相同的。)
您不能同时从同一个套接字读取多个线程。
你应该做的是:
有一个专用线程来接收所有入站数据包,查看源 IP/端口,并根据需要将数据路由到适当的处理线程。
为每个处理线程提供自己的套接字,该套接字bind()连接到相同的本地 IP/端口并连接connect()到它感兴趣的特定源 IP/端口,然后每个线程可以recvfrom()独立调用,并且它只会返回与源匹配的数据包线程正在等待。