Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Sofware-Struktur für kontinuierliche UDP-Kommunikation

  Alt 25. Mär 2013, 05:40
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
  Mit Zitat antworten Zitat