Как я могу запросить определенные данные с сервера, используя UDP?

Меня интересует, как правильно запрашивать данные через клиента. Например, сервер имеет два типа данных. Я хотел бы попросить данные под буквой а введите сюда описание изображения

    Client                           Server
       |                               |
       |                               |         for example an array
       |                               |     a - data (1,2,3,4,5)
       |          how to ask?          |    /
    sendto - - - - - - a - - - - -> recvfrom  
       |                               |    \
       |                               |     b - data (0,0,0,2,1)
       |                               |
       |                               |
   recvfrom <- - - - - a - - - - - - sendto
       |
       |
       |
       a (1,2,3,4,5)

На данный момент я отправляю данные и получаю вот так

#include <WinSock2.h>
#include <Ws2tcpip.h>


amountRead = recvfrom(sock, (char*)&array_a, sizeof array_a, 0, (LPSOCKADDR)&sAddr, &sizeAddr);
if (amountRead == SOCKET_ERROR) {
    std::cout << " WARNING: " << "\t" << std::endl;
}
else {
    std::cout << " GOOD: " << "\t" << std::endl;
}

sendto(sock, (char*)&array_a, sizeof array_a, 0, (LPSOCKADDR)&sAddr, sizeAddr);

Как вы понимаете, сейчас нет вторых данных, все потому, что я не знаю, как выполнить проверку на сервере по запросу клиента, а также не знаю, что клиент должен отправить на сервер, чтобы получить определенные данные.


Ответы (1 шт):

Автор решения: joker

Используйте любой заранее оговоренный формат сообщения для этих запросов. Можно, например, выделить первый бит сообщения под "является ли это сообщение запросом на тип данных", если он выставлен в 1, то второй бит будет означать тип a или b, а для не запроса это будут полезные данные. На стороне сервера парсить эти сообщения. Можно отдельно посылать сообщение с запросом определённого вида.

→ Ссылка