Hi zusammen,
ich muss auf Nachrichten von einem Gerät warten, das mir per UDP Daten sendet. Teils fortlaufend, teils mit einer Pause.
Gelöst habe ich das bisher so:
Code:
UdpClient Client = new Client(Port);
Client.BeginReceive(new AsyncCallback(UDPRecvCallback), null);
private void UDPRecvCallback(IAsyncResult res)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 2000);
byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint);
// Hier Werte protokollieren und visualisieren
Client.BeginReceive(new AsyncCallback(recv), null);
}
In der Callback-Funktion "UDPRecvCallback" werden die empfangenen Werte verarbeitet (geparst), protokolliert und visualisiert.
Ich finde das persönlich aber etwas unsauber gelöst.
Ich würde gerne die Werte protokollieren und wenn diese protokolliert sind, die Daten bestätigen und anschließend wird noch ein "Fertig"-Telegramm ausgetauscht. Erst danach ist die Software bereit für ein neues UDP-Telegramm.
Das Gerät sendet mir die UDP-Daten auch so lange fortlaufend, bis die Software entsprechend antwortet und umgekehrt (um sicherzustellen, dass die Daten auch wirklich korrekt verarbeitet wurden):
Code:
Gerät C#-Software
----------------------
Daten ->
Daten ->
...
<- Daten quittieren
<- Daten quittieren
<- Daten quittieren
...
Fertig? ->
Fertig? ->
...
<- Fertig!
<- Fertig!
...
ggf. Wartezeit und das Ganze von vorne
Die Visualisieren sollte vielleicht komplett unabhängig ablaufen.
Was gibt es denn hier für Möglichkeiten, dies flexibel und ordentlich zu programmieren (C# + WPF)?
Grüße
Matze