Я совершенно новичок в сокетных приложениях. Я провел значительное количество исследований, но не смог найти однозначного ответа.
Предварительная редакция. Мне известно, что 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?