Обрабатывать несколько UDP-клиентов - PullRequest
0 голосов
/ 10 октября 2019

У меня есть один сервер и несколько клиентов 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 
}

В сценарии с несколькими клиентамиесли я получаю сообщение от одного клиента, оно копируется в локальный буфер с максимальным размером буфера. И во время обработки этого сообщения, если мы получим еще одно сообщение от другого клиента, где оно будет храниться с перерывами перед чтением в локальный буфер? Дескриптор файла сокета имеет свой собственный буфер?

Что произойдет, если оба клиента отправят сообщение одновременно? Только один читается в локальном буфере, что будет с другим сообщением? это будет ждать следующего recvfrom?

Я прочитал, что если Максимальный буфер меньше размера сообщения / полученного пакета, тогда recvfrom будет считывать только максимальную длину буфера и может через некоторую ошибку ... Хотя все мои клиентыотправлять только 5 байтов максимум. Если я назначу Максимальные байты в 1024 байта, что намного больше, чем ожидалось, какие цены я буду платить?

Спасибо.

...