Seite 1 von 1

Telnet/TCP sendet immer 3 Byte zu viel

Verfasst: 8. Januar 2009 20:10
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.

Verfasst: 8. Januar 2009 21:19
von Christian81
Du verpackst deine Daten in ein QDatastream - da kommen deine zusätzlichen 3 Bytes her.

Verfasst: 10. Januar 2009 23:58
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)

Verfasst: 11. Januar 2009 09:43
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.

Verfasst: 11. Januar 2009 11:34
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...

Verfasst: 12. Januar 2009 21:17
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)

Verfasst: 12. Januar 2009 21:27
von upsala
nc = netcat