Laden...

Wie kann ich über den TCP Client empfangene Daten in mit der korrekten Länge parsen?

Erstellt von Tahlon vor 4 Jahren Letzter Beitrag vor 4 Jahren 744 Views
T
Tahlon Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren
Wie kann ich über den TCP Client empfangene Daten in mit der korrekten Länge parsen?

ns.Read(bytesFrom, 0, 1024);
dataFromClient = Encoding.ASCII.GetString(bytesFrom);

Guten Tag 😉
bin mal ganz neu hier.... habe aber schon sehr viel Hilfestellungen hier gefunden.
Leider nichts zu meinem jetzigen "Problem".

Übertragen wird eine IP in form eines Strings. Wenn ich die IP nun mit IPAdress.Parse() oder eben TryParse versuche zu Parsen geht das nicht.

Das sollte daran liegen das der String ja 1024 "Zeichen" wegen den Buffer des Streams.
Ich kann nun den String in einer For-Schleife so formen das nur noch Zahlen und Zeichen
darin vorkommen. Aber gibt es da keine besseren Lösung ?
Ich habe versucht alle Leerzeichen im String zu entfernen aber die überflüssigen Zeichen sind leider
keine Leerzeichen aber eben auch keine Zeichen, Zahlen oder Buchstaben ....

Jemand eine Idee wie ich es ohne for-Schleife machen kann die IP aus dem String zu bekommen
oder welches "Zeichen" es ist was durch die Umwandlung der leeren bytes in den String geschrieben wird ?

T
2.224 Beiträge seit 2008
vor 4 Jahren

Du bekommst eigentlich beim auslesen der Bytes vom Socket die tatsächliche Anzahl der empfangenen Bytes.
Entsprechend musst du den Buffer auf die Länge der Bytes die du empfangen hast kürzen.
Dann hast du die tatsächlichen Bytes im Buffer und kannst diese in den String umwandeln.

Nachtrag:
Hier in der Doku sogar ein sauberes Beispiel über den TcpClient, der dir das kürzen abnimmt.

Doku

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

T
Tahlon Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren

Aber wie kann ich die bytes kürzen wenn ich nicht weiß wie viele der bytes wirklich gebraucht werden da eine IP ja nicht immer gleich groß ist. In der Doku von dir finde ich jetzt nichts was mir Hilft den String passend zu machen also ohne die unnötigen Chars .... Oder bin ich Blind ?!

4.942 Beiträge seit 2008
vor 4 Jahren

Die NetworkStream.Read-Methode gibt die Anzahl der gelesenen Bytes zurück. 😉

Und die Encoding.GetString-Methode gibt es als überladene Funktion mit 3 Parametern (s.a. Beispiel dort)...

T
Tahlon Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren

Vielen lieben Dank ihr zwei 😉
Funktioniert super jetzt ... und sieht auch schlank aus ...

Hier meine Lösung für andere 😉

Int32 Count = ns.Read(bytesFrom, 0, TCP_Transmitter.ReceiveBufferSize);
dataFromClient = Encoding.UTF8.GetString( bytesFrom , 0 , Count );
 IP = IPAddress.Parse(dataFromClient);