[SOLVED] QT Server - Kein Datenempfang
Verfasst: 17. Dezember 2011 19:12
Hallo,
ich habe ein Problem beim übermitteln von daten übers Netwerk (TCP-Socket).
Ich habe hierfür einen Server, welcher dann die einzelnen Sockets in Unterschiedlichen Threads verwaltet.
Das verbinden klappt soweit. Also Verbindung steht.
Wenn der Client daten sendet, dann bekomm ich als return wert "14" raus. Also hat der Datenversand auch funktioniert!
Mein Server zeigt aber leider diesen übermittelten Wert nicht an.
Habe bisher 2 Versuche unternommen:
einfach per Datastream die Werte direkt zu versen und einmal ein QByteBlock zu erstellen und dann die Daten zu versenden. Beides klappt aber nicht.
Hier mal meine 2 Dateien:
Server:
Client:
ich habe ein Problem beim übermitteln von daten übers Netwerk (TCP-Socket).
Ich habe hierfür einen Server, welcher dann die einzelnen Sockets in Unterschiedlichen Threads verwaltet.
Das verbinden klappt soweit. Also Verbindung steht.
Wenn der Client daten sendet, dann bekomm ich als return wert "14" raus. Also hat der Datenversand auch funktioniert!
Mein Server zeigt aber leider diesen übermittelten Wert nicht an.
Habe bisher 2 Versuche unternommen:
einfach per Datastream die Werte direkt zu versen und einmal ein QByteBlock zu erstellen und dann die Daten zu versenden. Beides klappt aber nicht.
Hier mal meine 2 Dateien:
Server:
Code: Alles auswählen
void TCPThread::run()
{
QTcpSocket tcpSocket;
if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
emit error(tcpSocket.error());
return;
}
QString IP(tcpSocket.peerAddress().toString());
std::cout << "New Connection (IP " << IP.toStdString() << " connected)\n";
tcpSocket.waitForReadyRead();
QString string;
QDataStream in(&tcpSocket);
in.setVersion(QDataStream::Qt_4_7);
in.setByteOrder(QDataStream::LittleEndian);
QTime time;
time.start();
while(tcpSocket.waitForReadyRead()){
//In diese Schleife geht der Server nie! Die Funktion wartet also bis timeout und sendet dann return 0 :(
if (tcpSocket.bytesAvailable()){
qDebug() << "Test";
in >> string;
std::cout << string.toStdString();
}
}
std::cout << "Connection timeout (IP " << IP.toStdString() << " disconnected)\n";
this->quit();
}
Code: Alles auswählen
connection = new QTcpSocket(this);
connection->connectToHost("localhost",7835);
if(connection->waitForConnected()){
QString text("test");
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out << (quint16)0;
out << text;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
qDebug() << connection->write(block);
//Return ist hier 14!!
}
else {
connection = NULL;
}
settings = NULL;