2017-02-18 1 views
1

Zunächst entschuldige ich mich für die falsche Verwendung der Terminologie.Listen zu bestimmten Port mit UDPClient & Get übermittelte Pakete

Ich habe einen Sensor in meinem lokalen Netzwerk. Es überträgt aktuelle Temperaturwerte an alle im Netzwerk an Port 35333. Ich möchte ein C# -Konsolenprogramm erstellen, das kontinuierlich Pakete von diesem Sensor empfängt.

Dies ist meine aktuellen Code:

public static UdpClient Client = new UdpClient(35333); 

private static async void Start() 
{ 
     Client.BeginReceive(new AsyncCallback(recv), null); 
} 

private static void recv(IAsyncResult res) 
{ 
     IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); 
     byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint); 

     //Process codes 

     Client.BeginReceive(new AsyncCallback(recv), null); 
} 

Der obige Code funktioniert, ist aber hier das Problem: Ich gleiche Byte-Array die ganze Zeit erhalten bleiben.

... 
    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 
... 

Soweit ich weiß, und wieder, mein armes Netzwerkkenntnisse entschuldigen, ich muss irgendwie eine Bestätigung an diesem Sensor zurückschicken, so beginnt es mir die ‚‘ echten ‚‘ Senden von Daten.

Alle Tipps oder Anregungen willkommen!

+0

UDP ist eine sitzungs Sendung. Mit einem Potenzial für mehrere Empfänger des UDP-Pakets von diesem einzelnen Gerät ist ein ACK höchst unwahrscheinlich. Sie sollten die Geräteprotokolldokumente überprüfen und prüfen, ob Beispielcode verfügbar ist. – JamieMeyer

Antwort

1

Hier gibt es mindestens zwei Möglichkeiten.

Erstens kann dies nur die Temperatur sein, und es ändert sich nicht. In diesem Fall müssen Sie die Bytes so analysieren, wie es die Spezifikation des Sensors vorschreibt.

Zweitens, wenn dies in der Tat das Paket ist, das eine Bestätigung benötigt, dann müssen Sie herausfinden, welchen Port der Sensor überwacht (aus der Spezifikation), und wie das Bestätigungspaket (aus der Spezifikation) aussehen und Sende es an diesen Port.

Der Schlüssel hier ist die Überprüfung der Dokumente, die mit dem Sensor geliefert wurden. New Code würde innerhalb recv Methode sitzen und die folgenden ähnlich aussehen:

private static void recv(IAsyncResult res) 
{ 
    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); 
    byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint); 

    //Pseudo code 
    //start_packet is the packet of bytes above from the sensor 
    If (received == start_packet) 
    { 
     //send acknowledgement 
    } 

    //Process codes 
    Client.BeginReceive(new AsyncCallback(recv), null); 
}