UDP - возможно ли принимать несколько сообщений за один прием? - PullRequest
0 голосов
/ 03 сентября 2018

1. Можно ли получить несколько сообщений за один прием?

Псевдокод отправителя:

target = ("xxx.xxx.xxx.xxx", 1234)
sender = new_udp_socket()
sender.send("Hello", target)
sender.send("World", target)

Псевдокод получателя:

receiver = new_udp_socket()
receiver.bind("", 1234)

while true
    data = receiver.recvfrom(512)
    print(data)

Возможно ли, что получатель получит "HelloWorld" за один приемный звонок вместо "Hello" и "World" отдельно?

Мне сказали, что возможно , но я бы хотел убедиться.

2. Если можно получить несколько сообщений за один прием, как мне обеспечить, чтобы мой код обрабатывал оба сообщения отдельно?

Я думал об этом, но не смог найти никакого решения.

Моей первой идеей было добавление байта в начале вызова отправки с указанием длины сообщения.

Я не верю, что это было бы также надежно, потому что, если в буфере получателей слишком много данных, тогда начало (длина сообщения) может быть обрезано, и поэтому моя программа потерпит неудачу.


Спасибо за любую помощь!

1 Ответ

0 голосов
/ 03 сентября 2018

После долгих исследований я нашел ответ на свой вопрос.

Один вызов от recvfrom только когда-либо получит один вызов sendto.

Источники:

...