我写的音频流光(客户端 - 服务器)矿山(C/C++)的项目, 和我决定线程UDP服务器这一个多项目。问题实现多线程UDP服务器(线程池?)
这背后的逻辑是,每个客户端将在自己的线程来处理。 我遇到的问题是线程互相干扰。
我的服务器做的第一件事是创建一种线程池;它创建5个 线程,所有由recvfrom()
功能自动封锁, 虽然看似是,在大多数时候我另一台设备 连接到服务器,多个线程响应,后来 导致服务器时代完全阻止,不能进一步操作。
这是非常困难的,所以我在这里写为了 获得多线程UDP服务器是如何实现的,通常一些建议来调试这一点。
我应该使用一个互斥体或信号代码的一部分吗?如果是这样,在哪里?
任何想法都会非常有帮助。
感谢您的评论康莱德! 但如果recvfrom函数将在主线程独自一人,怎么可能当我们说我的服务器上获取数据 - 4个客户机发送出去一次,就它没有任何问题? –
每个UDP客户端都被分配一个助手线程。基于UDP IP和客户端端口的客户端映射将由主线程维护。在接收数据时,将使用IP和端口将数据转发到正确的线程。 –
recvfrom函数只接收来自客户端的UDP数据。它维护一个线程ID表以及每个线程负责的相应客户端源IP和端口的映射。如果收到一个新数据包并且表中没有条目,则可以创建一个新线程并在该表中分配一个新条目,并将数据连同客户端IP和端口一起传递给该线程以发送回复。如果收到新的数据包并且表中已经有映射,则数据通过消息队列传递给该线程。 –