PROBLEM: NUL muss gesendet werden!

Seb1982

Grünschnabel
Hallo allerseits,

ich habe leider gerade ein großes Problem mit C++. Ich arbeite an einem Programm, welches über TELNET eine Verbindung mit einem bestimmten Server herstellt. Die Verbindung ist kein Ding; Socket erstellt, Port 23 und schon geht's. Schwierig ist dagegen der Datenaustausch. Denn bevor die gegenseite Klartext sendet und empfangen kann, muss erst einmal ein Handshake durchgeführft werden. Wie der aussehen muss, weiß ich dank Sniffersoftware.

Über den Socket versende ich Strings, die ich mir vorher als char erstellt habe. Und weil mir das Nachgucken in den ASCII-Tabellen zu mühselig war, gebe ich den Zeichencode, der natürlich in Wirklichkeit dem über die Leitung gesendete Byte entspricht, gleich so ein. Funktionierte bei den ersten beiden Schritten auch wunderbar, bloß ab den dritten nicht mehr. Denn das zu Versendende sieht so aus:

char handshake2[27] = {0xff,0xfd,0x01,0xff,0xfd,0x03,0xff,0xfb,0x27,0xff,0xfb,0x1f,0xff,0xfa,0x1f,0x00,0x50,0x00,0x19,0xff,0xf0,0xff,0xfb,0x00,0xff,0xfd,0x00};

Wie ihr seht, wenthält diese Zeile u.a. 0x00, also acht Nullbits. Blöd dabei ist, dass 00 in der ASCII-Tabelle dem Zeichen NUL entspricht, oder in C++ eben End Of String. Natürlich muss aber der komplette String übertragen werden, damit die Nachricht an den Server überhaupt Sinn macht.

Ich habe bereits alle mir bekannten Variationen von \0 ausprobiert, bin aber jedes Mal gescheitert. Wisst ihr, wie ich die Hexadezimalnull über einen String übertragen kann? Irgendwie muss das ja gehen.

Danke vielmals für Antworten!

Seb
 
Hi.

Also ein std::string in C++ kann auch NULs enthalten.

Dann versteh ich nicht dein Problem. Du sendest doch mit der Funktion send, oder?! Da mußt du doch nur die richtige Länge des Puffers angeben und es werden dann so-und-soviel Byte wie angegeben gesendet?

Gruß
 
moin


Da mußt du doch nur die richtige Länge des Puffers angeben und es werden dann so-und-soviel Byte wie angegeben gesendet?
Da hat er recht. Du darfst für das übergeben der Länge hier aber nicht strlen(handshake2) verwebden, da das dann wirklich nur bis zur erstes NULL geht!


mfg
Tobias
 
Zurück