处理多个UDP客户端

时间:2019-10-09 21:35:05

标签: sockets network-programming udp serversocket tcplistener

我的设置中有一个服务器和多个UDP客户端,每个客户端以固定的时间间隔(几毫秒)发送一个布尔字符串(最大5个字节的真/假)。我要根据它确定设备是否存在。在启动程序并将c ++作为我的编程语言之前,客户端的数量是未知的。

  1. 是否可以在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 
}

在多客户端方案中,如果我从一个客户端收到消息,则将其复制到最大缓冲区大小的本地缓冲区中。并且在处理此消息时,如果我们从另一个客户端收到另一条消息,则在读取到本地缓冲区之前,此消息将在哪里间歇存储?套接字文件描述符是否有自己的缓冲区?

  1. 如果两个客户端同时发送消息会怎样?只有一个读到本地缓冲区,另一条消息会发生什么?它会等待下一次接收吗?

  2. 我读到,如果最大缓冲区小于收到的消息/数据包大小,那么recvfrom将仅读取最大缓冲区长度,并且可能会出现一些错误...尽管我所有的客户端最多只能发送5个字节。如果我将“最大字节数”分配给1024个字节,这比预期的要远得多,我要付多少价格?

谢谢。

0 个答案:

没有答案
相关问题