Получали ли UDP Sockets Decalate данные в различные сообщения или ReCV читает как можно больше данных одновременно?C++

Программы на C++. Форум разработчиков
Anonymous
Получали ли UDP Sockets Decalate данные в различные сообщения или ReCV читает как можно больше данных одновременно?

Сообщение Anonymous »

Допустим, у меня есть заявка отправителя и заявление на приемник, который общается через UDP. Сначала я отправляю эти 15 байтов: < /p>

Код: Выделить всё

[MYHEADER]hello< /code> < /p>

...Then после этого я отправляю еще 15 байт: < /p>

[MYHEADER]world< /code> < /p>

Теперь, в приложении приемника, я слушаю в том же порту с сокетом UDP, который связан с тем же адресом. Допустим, что оба сообщения появились (и в одном и том же порядке), так как в последний раз я проверял сокет приемника. Опрос сокета для входящих данных Каждый кадр: < /p>

uint32 PendingSize;
while (Socket->HasPendingData(PendingSize))
{
uint32 BytesRead;
uint8 MessageData[kMaxMessageSize];

if (Socket->Recv(MessageData, kMaxMessageSize, BytesRead))
{
// Do stuff here
// Will BytesRead be equal to PendingSize?
}
}
< /code>

HasPendingData
завершает вызов в ioctlsocket с помощью fionread , возвращая, ожидает ли данные в буфере приема и заполняет pendingsize с номером ожидающих байтов. Recv вызывает recv , чтобы прочитать эти данные в буфер, который я могу прочитать. Если он возвращает true, то я отвечаю на полученные данные. < /P>

Вот мой вопрос. Какой из этих сценариев точно отражает то, что произойдет в этой ситуации?
  • Код: Выделить всё

    HasPendingData
    возвращает True и показывает ожидающий размер 15 байтов. Recv дает мне сообщение [myheader] hello .
  • Код: Выделить всё

    HasPendingData
    возвращает True и показывает ожидающий размер 15 байтов. Recv дает мне сообщение [myheader] World .
  • Код: Выделить всё

    HasPendingData
    возвращает false.
опция b.


[*]

Код: Выделить всё

HasPendingData
возвращает true и показывает ожидающий размер 30 байтов. Recv дает мне сообщение [myheader] hello [myheader] World .
HasPendingData< /code> возвращает false. < /li>
< /ol>

Любое понимание ценится. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/261 ... -recv-read

Вернуться в «C++»