www.mikrocontroller.net

Forum: PC-Programmierung C# Strings: TCP Datenpakete


Autor: Pasci (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
TcpClient server = new TcpClient("169.254.80.129", 2111);
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.
String data = "Hallo";
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

Autor: Markus V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eben nochmal die Doku konsultiert. Verwende anstatt Write() die 
Methode WriteByte().

Gruß
Markus

Autor: Pasci (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
ns.WriteByte(0x02);
ns.Write('Meine Daten');
ns.WriteByte(0x03);
ns.Flush();

Gruss
Pasci

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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:
>
> ns.WriteByte(0x02);
> ns.Write('Meine Daten');
> ns.WriteByte(0x03);
> ns.Flush();
> 

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

Autor: Pasci (Gast)
Datum:

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

Vielen Dank für deine Hilfe.

Gruss
Pasci

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.