Forum: PC-Programmierung C# Strings: TCP Datenpakete


von Pasci (Gast)


Lesenswert?

Hallo zusammen

Ich habe eine Frage die die TCP-Datenpakete betrifft, wenn ich mit C# 
Strings übers Netzwerk schicke:
Ich erstelle mir ein TcpClient-Objekt von dem ich den NetworkStream hole 
über welchen ich dann kommuniziere.
1
TcpClient server = new TcpClient("169.254.80.129", 2111);
2
NetworkStream ns = server.GetStream()
Wenn ich nun über den Stream einen String rausschicken möchte, muss ich 
ja den String in bytes encoden, da ns.Write() nur bytes als Daten 
akzeptiert.
1
String data = "Hallo";
2
ns.Write(Encoding.ASCII.GetBytes(data), 0, data.Lenght);
Wenn ich dies tue habe ich aber das Problem, dass ich die beiden Flags 
STX und ETX die in meinem TCP-Datenpaket signalisieren wo Text beginnt 
und wo er wieder aufhört, fehlen. Ich dachte C# würde diese Flags beim 
encoden automatisch anhängen, dem ist aber nicht so.
Nun meine Frage an euch: Wie kann ich erreichen dass bei meinen Strings 
diese Flags mitgeschickt werden? Ideen, Anregungen?

Gruss
Pasci

von Markus V. (Gast)


Lesenswert?

Wieso sollte beim Umwandeln eines Strings in ein Byte-Array STX und ETX 
angehängt werden? Das ist DEIN Protokoll. Ich z.B. möchte gerne 0xFF und 
0xFE ;-)...

Schreibe doch einfach VOR Deinem String ns.Write( Convert.ToByte( Stx ) 
) bzw. am Ende halt das Etx-Byte.

Gruß
Markus

von Markus V. (Gast)


Lesenswert?

Ich habe eben nochmal die Doku konsultiert. Verwende anstatt Write() die 
Methode WriteByte().

Gruß
Markus

von Pasci (Gast)


Lesenswert?

Nein das ist nicht mein Protokoll, sondern das Messgerät das ich 
ansprechen will benötigt diese Flags in den Daten, sonst kann er die 
gesendeten Befehle nicht interpretieren. Es ist als DEREN Protokoll.. 
;-)

Ich habe noch nicht ganz verstanden was du meinst. Soll ich also zuerst 
ein Byte in den Buffer schreiben, dann meine Daten und am Schluss 
nochmals ein Byte? Etwa so:
1
ns.WriteByte(0x02);
2
ns.Write('Meine Daten');
3
ns.WriteByte(0x03);
4
ns.Flush();

Gruss
Pasci

von Karl H. (kbuchegg)


Lesenswert?

Pasci schrieb:
> Nein das ist nicht mein Protokoll, sondern das Messgerät das ich
> ansprechen will benötigt diese Flags in den Daten, sonst kann er die
> gesendeten Befehle nicht interpretieren. Es ist als DEREN Protokoll..
> ;-)
>


Egal.Der springende Punkt ist: Warum um alles in der Welt soll sich 
Encode darum kümmern, dass da STX und ETX davor/danach hin sollen?


> Ich habe noch nicht ganz verstanden was du meinst. Soll ich also zuerst
> ein Byte in den Buffer schreiben, dann meine Daten und am Schluss
> nochmals ein Byte? Etwa so:
>
1
> ns.WriteByte(0x02);
2
> ns.Write('Meine Daten');
3
> ns.WriteByte(0x03);
4
> ns.Flush();
5
>

Klingt doch gut.
Jetzt wird gesendet: STX dann deine Daten, also der String, dann ETX.
passt doch. Alles in der richtigen Reihenfolge

von Pasci (Gast)


Lesenswert?

Super, so funktionierts!
Manchmal liegt die Lösung so nah.. ;-)

Vielen Dank für deine Hilfe.

Gruss
Pasci

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.