Hi,
ich ärgere mich jetzt schon seit 2 Stunden über, meine Unfähigkeit. Ich schaffs einfach nicht einen QVector<QString> über einen QDataStream(QTcpSocket) an einen QTcpServer zu schicken. Eigentlich muss ich laut examples und Doku ja nur eine Verbindung mit dem Server herstellen, anschließend via QDataStream << QVector<QString> den Vector in den Stream schreiben und am server mit QDataStream >> QVector<QString> wieder auslesen. Hab ich da irgendeinen Denkfehler? Verbindung zum Server klappt problemlos ich bekomme auch keinen Fehler, erst wenn ich am Server den Stream lesen will ist dieser leer. Vielleicht kann mir ja wer helfen.
lg
Stefan
Qt StandartContainer übers Netzwerk schicken?
Hi,
sorry das ich mich erst jetzt wieder melde. Das mit dem Vector hab ich so halb hingebracht. die Hälfte der Liste ist am Server leider leer angekommen und ich hab keine Ahnung warum aber egal. Ich machs jetzt folgendermaßen:
Das Problem ist nun, dass nach auslesen der Daten nur das QByteArray nur 16 byte lang ist und ich nicht weiß warum, denn die blocksize wird richtig ausgelesen und erst wenn die available Bytes die richtige größe haben wird ausgelesen.
Sieht wer den Fehler?
lg
Stefan
sorry das ich mich erst jetzt wieder melde. Das mit dem Vector hab ich so halb hingebracht. die Hälfte der Liste ist am Server leider leer angekommen und ich hab keine Ahnung warum aber egal. Ich machs jetzt folgendermaßen:
Code: Alles auswählen
Client methode: wird über signal aufgerufen wenn die Verbindung zum Server erfolgreich war
void LabGbParseWindow::sendAntiSense()
{
QByteArray block;
QDataStream out(&block,QIODevice::WriteOnly);
out << (quint32)0;
for(int i=0;i<m_antiSenseVector.size();++i) {
out << m_antiSenseVector.at(i).toUtf8()+"\n";
}
out.device()->seek(0);
out << (quint32)(block.size() - sizeof(quint32));
m_socket.write(block);
m_antiSenseVector.clear();
m_socket.disconnectFromHost();
progressSaveStatus->setValue(progressSaveStatus->value()+1);
QMessageBox::information(this,"Save succeed","Sequence saved successful!");
}
Code: Alles auswählen
Server methode: wird vom signal readready aufgerufen
void LabServer::readData()
{
QDataStream in(&m_socket);
if( m_blockSize == 0 )
{
if( m_socket.bytesAvailable() < (int)sizeof(quint32) )
return;
in >> m_blockSize;
}
if( m_socket.bytesAvailable() < m_blockSize ) {
qDebug() << "Bytes available " << m_socket.bytesAvailable();
return;
}
qDebug() << "Bytes " << m_socket.bytesAvailable();
QByteArray x;
in >> x;
QString r(x);
qDebug() << r;
}
Sieht wer den Fehler?
lg
Stefan
-
Oliver Hom
- Beiträge: 33
- Registriert: 27. Mai 2009 12:44
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: