Я пытаюсь получить некоторые данные, которые передаются через UDP-сервер многоадресной рассылки. Я кодировал C# Приложение WPF, где я могу ввести порт и IP-адрес сервера. Соединение с сервером установлено успешно, и я могу получать несколько пакетов данных (от 50 до 500 пакетов, меняется при каждой попытке)
Я вызываю функцию приема через диспетчер каждые 33 мс. Более длительное время между событием диспетчера не решает проблему.
Через несколько секунд UDPClient теряет соединение, данные не могут быть получены и больше не могут быть установлены.
Вот функция кнопки, устанавливающей соединение и запускающей диспетчер:
public int connectToArtWelder()
{
if (!checkIPAddress())
{
MessageBox.Show("Please enter a valid IP-Address.", "Wrong IP-Address", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
string iPString = tB_weldConIP.Text;
int port = Convert.ToInt32(tB_weldConPort.Text);
IPAddress iPAddress = IPAddress.Parse(iPString);
udpClient.Connect(iPAddress, port);
try
{
dispatcherTimer2.Tick += new EventHandler(Receive);
dispatcherTimer2.Interval = new TimeSpan(0, 0, 0, 0, 33);
dispatcherTimer2.Start();
}
catch
{
}
}
return 0;
}
Вот функция приема:
private void Receive(object sender, EventArgs e)
{
try
{
int condition = udpClient.Available;
if (condition > 0)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
var asyncResult = udpClient.BeginReceive(null, null);
asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(10));
if (asyncResult.IsCompleted)
{
byte[] receiveBytes = udpClient.EndReceive(asyncResult, ref RemoteIpEndPoint);
double[] d = new double[receiveBytes.Length / 8];
// Do something with data
}
}
else
{
// The operation wasn't completed before the timeout and we're off the hook
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Пожалуйста, дайте мне знать, если у кого-то есть такая же проблема или решение моей проблемы.