Telnet/TCP sendet immer 3 Byte zu viel

Alles rund um die Programmierung mit Qt
Antworten
Hans_Wurst
Beiträge: 36
Registriert: 8. Mai 2008 16:44

Telnet/TCP sendet immer 3 Byte zu viel

Beitrag von Hans_Wurst »

Hallo,

ich möchte eine Telnet-Anbindung erstellen. Der Verbindungsaufbau und das Empfangen funktioniert soweit gut. Wenn ich jedoch sende, kommen beim Empfänger immer 4 Zeichen an, obwohl ich nur ein Zeichen sende.
Wenn ich das gleiche Zeichen im Telnet von Windows (Komandozeile) sende kommt wie gewünscht nur dieses eine Zeichen an.

Ich hoffe ihr könnt mir Tipps geben, was ich falsch mache.

Code: Alles auswählen

void telnetClient::sendRequest()
{
	QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_4);

    out << uchar('?');

    tcpSocket->write(block);
}
Meine Vermutung ist, dass es vielleicht mit dem payload (32 Bit) dür das TCP-Protokoll zu tun haben könnte, in dem der Empfänger (bei TCP) erfährt wie viele Bytes er zu erwarten hat. Aber die habe ich bewusst weggelassen, da ich ja nicht noch mehr Zeichen übertragen möchte.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du verpackst deine Daten in ein QDatastream - da kommen deine zusätzlichen 3 Bytes her.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Hans_Wurst
Beiträge: 36
Registriert: 8. Mai 2008 16:44

Beitrag von Hans_Wurst »

@Christian81
Danke für die Hilfe.


Ich habe es jetzt mit putChar versucht. Damit müsste doch aber garantiert sein, dass nur ein Zeichen gesendet wird. Nun kommt zweimal das gesendete Zeichen an.

Code: Alles auswählen

tcpSocket->putChar('?');
Mit diesem Code erhalte ich also "??" am Empfänger.

Wenn ich...

Code: Alles auswählen

QByteArray byteArray("?");
tcpSocket->write(byteArray);
...verwende, kommt ebenfalls "??" am Empfänger an. Verwende ich jedoch...

Code: Alles auswählen

QByteArray byteArray("?\n");
tcpSocket->write(byteArray);
...dann kommen nur die Zeichen an, die ich auch gesendet habe.
Für meine Anwendung würde dies zwar genügen, ich kann mir jedoch einfach nicht erklären warum die Zeichen in der ersten Version doppelt gesendet werden (bzw. als ein String mit zwei gleichen Zeichen)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Da weiß ich jetzt leider auch nicht weiter aber ich bin mir sicher das da nur 1 Byte rübergeht. Am besten mal mit WireShark/Etherreal die Netzwerkkommunikation überwachen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Es geht auch definitiv jeweils nur eins rüber. Wahrscheinlich verdoppelt dein Empfänger die Zeichen, aber sowas läst sich mit nc relativ leicht nachprüfen...
Hans_Wurst
Beiträge: 36
Registriert: 8. Mai 2008 16:44

Beitrag von Hans_Wurst »

Ok, ich danke euch. Ich werde mich dann mal in WireShark einarbeiten und das ganze noch einmal überprüfen. "nc" kenne ich leider nicht (bzw. weiß ich nicht was damit gemeint war)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

nc = netcat
Antworten