我的设置中有一个服务器和多个UDP客户端,每个客户端以固定的时间间隔(几毫秒)发送一个布尔字符串(最大5个字节的真/假)。我要根据它确定设备是否存在。在启动程序并将c ++作为我的编程语言之前,客户端的数量是未知的。
是否可以在UDP套接字连接中使用多线程?我遇到了一个TCP示例,他们在其中创建了一个新的套接字描述符并生成了一个线程。如果可以为UDP服务编写多线程服务,请提供示例/参考代码。
在
while (true)
{
if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0,
(struct sockaddr *)&cient_addr, &client_addr_len)) == -1)
{
perror("recvfrom");
exit(1);
}
// Process buffer...
// Do something with buffer
}
在多客户端方案中,如果我从一个客户端收到消息,则将其复制到最大缓冲区大小的本地缓冲区中。并且在处理此消息时,如果我们从另一个客户端收到另一条消息,则在读取到本地缓冲区之前,此消息将在哪里间歇存储?套接字文件描述符是否有自己的缓冲区?
如果两个客户端同时发送消息会怎样?只有一个读到本地缓冲区,另一条消息会发生什么?它会等待下一次接收吗?
我读到,如果最大缓冲区小于收到的消息/数据包大小,那么recvfrom将仅读取最大缓冲区长度,并且可能会出现一些错误...尽管我所有的客户端最多只能发送5个字节。如果我将“最大字节数”分配给1024个字节,这比预期的要远得多,我要付多少价格?
谢谢。