首页 > 解决方案 > 处理多个 UDP 客户端

问题描述

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

  1. UDP套接字连接中是否可以有多线程?我遇到了 TCP 的示例,他们创建了一个新的套接字描述符并产生了一个线程。如果可以为 UDP 服务编写多线程,请提供示例/参考代码。

  2. 期间

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. 如果两个客户端同时发送消息会发生什么?只有一个被读取到本地缓冲区,另一条消息会发生什么?它会等待下一个 recvfrom 吗?

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

谢谢你。

标签: socketsnetwork-programmingudpserversockettcplistener

解决方案


推荐阅读