Гарантирует ли метод UdpClient.ReceiveAsync () дейтаграмму в виде одного куска? - PullRequest
0 голосов
/ 29 апреля 2018

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

Предположение, что пакет не упал: Всякий раз, когда я отправляю данные с использованием следующего, могу ли я быть уверен, что клиент отправил все данные, а сервер получил все целиком. Или я должен

1) На стороне клиента проверьте переменную sendData, чтобы увидеть, равен ли она размеру дейтаграммы. Если не равно, то отправьте оставшиеся данные, сместив столько, сколько sendData.

2) На стороне сервера проверьте размер readBuffer, чтобы узнать, равен ли он размеру дейтаграммы. Если не равно, то отправьте оставшиеся данные, сместив столько, сколько sendData.

Клиентская сторона:

var client = new UdpClient("127.0.0.1",5001);
var sentData = client.Send(new byte[] {1, 2, 3, 4, 5}, 5)
//can sendData be less than 5??

Серверная сторона:

var udpClient = new UdpClient(new IPEndPoint(IPAddress.Loopback, 5001));
var datagram = await udpClient.ReceiveAsync();
var readBuffer = datagram.Buffer;
//Can readBuffer contain less than 5 elements?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...