[geloest] Lesen aus QTcpSocket
Verfasst: 21. November 2006 11:55
Hallo allerseits,
ich versuche seit geraumer Zeit eine Client-Server Anwendung auf Basis der Fortune-Beispile von QT zu schreiben. Auch nach ausgiebiger Suche in den Qt Foren verstehe ich nicht, wieso ich vom Client aus nicht lesen kann. Die formal selbe Funktion im Server liest mir wunderschoen den String aus, beim Client ist er immer leer. Ich habe schon alle moeglichen anderen Wege ausprobiert.. ueber QByteArrays mit readAll/Line. Dort ist dann
qbyteArray.size() > 0, aber
qbyteArray.data() ein leerer String.
Waere super, wenn mir jemand weiterhelfen koennte.
Hier mal meine Funktionen, zuerst die des Clients, der versuchen soll das 'hallo' des Servers zu lesen.
Und die Server Funktion, die auf jeden neue Verbindung hin das hier ausfuehrt:
Zu guter letzt noch die Ausgaben:
Der Server sendet wunderbar:
got a new connection.. sending the hello..
61 Bytes sent.
Aber ich kann es nicht auslesen:
trying to receive a message..
text is
hello message is empty
mittels tcpSocket->bytesAvailable() sehe ich, dass eigentlich alle Daten angekommen sind.. ich bin einfach ratlos. Hoffe jemand kann mir helfen. Danke im Voraus,
Felix
ich versuche seit geraumer Zeit eine Client-Server Anwendung auf Basis der Fortune-Beispile von QT zu schreiben. Auch nach ausgiebiger Suche in den Qt Foren verstehe ich nicht, wieso ich vom Client aus nicht lesen kann. Die formal selbe Funktion im Server liest mir wunderschoen den String aus, beim Client ist er immer leer. Ich habe schon alle moeglichen anderen Wege ausprobiert.. ueber QByteArrays mit readAll/Line. Dort ist dann
qbyteArray.size() > 0, aber
qbyteArray.data() ein leerer String.
Waere super, wenn mir jemand weiterhelfen koennte.
Hier mal meine Funktionen, zuerst die des Clients, der versuchen soll das 'hallo' des Servers zu lesen.
Code: Alles auswählen
void Client::readHello()
{
printf("trying to receive a message..\n");
QDataStream in(tcpSocket);
in.setVersion(QDataStream::Qt_4_0);
quint16 blockSize;
int i = 0;
while ((tcpSocket->bytesAvailable() < (int)sizeof(quint16)) && (i < 3)) {
printf("Nothing recieved\n");
sleep(1);
i++;
tcpSocket->disconnectFromHost();
return;
}
in >> blockSize;
if (blockSize == 0) {
printf("Received block has size zero\n");
tcpSocket->disconnectFromHost();
return;
}
if (tcpSocket->bytesAvailable() < blockSize) {
printf("Too few bytes received\n");
tcpSocket->disconnectFromHost();
return;
}
QString message;
in >> message;
printf ("text is %s \n", message.toLatin1().data());
if (message.size() == 0) {
printf("hello message is empty\n");
tcpSocket->disconnectFromHost();
return;
}
}
Code: Alles auswählen
void Server::sendHello()
{
printf("got a new connection.. sending the hello..\n");
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << "\nHello, welcome to the Boratd server \n";
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
clientConnection = tcpServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
qint64 size = clientConnection->write(block);
if (!clientConnection->waitForBytesWritten()) qWarning("Error while writing to network");
printf("%d Bytes sent.\n", (int) size);
connect (clientConnection, SIGNAL(readyRead()), this, SLOT(receiveHandler()));
connect (clientConnection, SIGNAL(bytesWritten(bytesSent)), this, SLOT(sendHandler()));
clientStatus = HELLO_SENT;
}
Der Server sendet wunderbar:
got a new connection.. sending the hello..
61 Bytes sent.
Aber ich kann es nicht auslesen:
trying to receive a message..
text is
hello message is empty
mittels tcpSocket->bytesAvailable() sehe ich, dass eigentlich alle Daten angekommen sind.. ich bin einfach ratlos. Hoffe jemand kann mir helfen. Danke im Voraus,
Felix