Forum: Compiler & IDEs Communication über telnel 0 in string bringt fehler


von anna (Gast)


Lesenswert?

Hallo an alle,

zuerst danke an alle die für dieses Forum immer Ihrer Zeit spenden. es 
hat mir bis jetzt so viel geholfen.

Meine frage ist:
ich möchte eine Kommunikation über Telnet dürchführen.
Leider ist es nicht möglicht, dass ich einen "0" sende.

Fehler--> Malformed Packet.

so sieht das schreiben:

1
 tcpWrite(iopen, "\xff\xfb\x18");//Terinal Type
2
  tcpWrite(iopen, "\xff\xfb\x25");//Authentification option
3
  tcpWrite(iopen, "\xff\xfb\x01");//Echo
4
  tcpWrite(iopen, "\xff\xfb\x00");//Binary Transmission

als info:
1
tcpWrite(int socket, string data);//Terinal Type
return anzahl der gesendete Byte oder -1 bei Fehler.

Die ersten drei Befehlen laufen ganz gut aber beim schreiben der letzten 
Befehl "tcpWrite(iopen, "\xff\xfb\x00");" kriege ich der obengennanten 
Fehler. Er liest die "ff fb" aber die 00 nicht. Er denkt, dass es die 
"\0" Null-terminierung ist.
Wie kann ich der Fehler beheben, irgend einen trick?

ich danke euch im voraus.
anna

von Karl H. (kbuchegg)


Lesenswert?

anna schrieb:

> Befehl "tcpWrite(iopen, "\xff\xfb\x00");" kriege ich der obengennanten
> Fehler. Er liest die "ff fb" aber die 00 nicht. Er denkt, dass es die
> "\0" Null-terminierung ist.
> Wie kann ich der Fehler beheben, irgend einen trick?

Das kann nicht funktionieren.
Ein String ist in C nun mal eine Abfolge von Bytes, die mit einem \0 
Byte beendet wird. Punkt. Das ist in C per Definition ein String und es 
gibt nichts, was du dagegen tun kannst.

Ergo KANNST du nicht ein Bytefeld, welches ein \0 Byte enthält über eine 
Funktion schleusen, die einen String erwartet.

In Telnet gibt es sowas wie einen binary Transmission Mode.
Allerdings ist dann die Funktion tcpWrite mit Sicherheit die falsche 
Funktion dafür. Da muss es dann noch eine Funktion geben, deren Signatur 
irgendwoe so aussieht

  size_t Function( int socket, void* data, size_t nrBytes );

so irgendwas in der Richtung. Also eine Funktion, der du explizit sagen 
kannst, wieviele Bytes in deinem Array sind.

von anna (Gast)


Lesenswert?

okay, ich habe eine andere Fiúnktion benutzt.
viele dank für die Antwort.

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.