Я пытаюсь получить шесть сообщений от одноадресных клиентов UDP. Получатель выглядит так:C#. UDP unicast
UdpClient udpclient = new UdpClient();
IPEndPoint localEp = new IPEndPoint(IPAddress.Parse(ClientIP), ClientPort);
udpclient.Client.Bind(localEp);
udpclient.Client.ReceiveTimeout = 10000;
bool isTimeExpired = false;
while (!isTimeExpired)
{
byte[] buffer;
try
{
buffer = udpclient.Receive(ref localEp);
}
catch (SocketException)
{
isTimeExpired = true;
continue;
}
// Deserialize
// ...
}
udpclient.Close();
Программа работает, но иногда я не получаю 6 сообщений (2 или 3). Заявка отправителя:
UdpClient client = new UdpClient();
IPEndPoint remoteep = new IPEndPoint(IPAddress.Parse(ClientIP), ClientPort);
// Serialize
// ...
stream.Position = 0;
byte[] data = new Byte[stream.Length];
stream.Read(data, 0, Convert.ToInt32(stream.Length));
client.Send(data, data.Length, remoteep);
stream.Close();
client.Close();
Я запускаю 6 экземпляров приложения-отправителя на одном компьютере (и одном экземпляре приемника). Мне нужно получать сообщения от каждого отправителя (всего шесть сообщений) все время. Где моя ошибка?
спасибо!
Peter Duniho, я знаю, что UDP не гарантирует доставку. Я думал, что мне нужно положить что-то вроде «Thread.Sleep (1000);» где-то. Потому что, когда я запускаю эти программы на своем ПК в большинстве случаев, я получаю все 6 сообщений. Когда я запускаю их на своем ноутбуке, я не получаю сообщений в основном (получаю 2 или 3, иногда 0). Однако, спасибо! – user3649515
Возможно, вы можете сделать что-то, что можно сделать для повышения надежности сетевого стека на этом компьютере. Но, в конечном счете, ваш код должен быть достаточно устойчивым, чтобы справляться с отсутствующими дейтаграммами. В этом отношении более высокая частота сбоев на этом компьютере, вероятно, является «хорошей», поскольку она дает вам лучшую тестовую среду, чтобы убедиться, что вы правильно обрабатывали обработку UDP. :) –
Питер Дунихо, ладно, спасибо! – user3649515