Seite 1 von 1

XML Daten streamen

Verfasst: 18. Februar 2017 23:17
von guju
Hallo!
Ich würde gerne von meinem Client Daten von einem Server empfangen. Der Server verschickt regelmäßig XML Text(zb. Server Zeit). Wenn ich mich als Client verbinde, und zb ALL schicke, dann sendet er unterschiedlich viele Informationen in unterschiedlichen Größen.
Wenn ich in meinem Client eine Verbindung mit dem Server erstelle und ALL schreibe, dann bekomme ich den ersten Datensatz.

Code: Alles auswählen

   
   socket->connectToHost(Server, Port);
   if(socket->waitForConnected(3000))
    {
        qDebug() << "Connected!";
        socket->write("<all/>");
        socket->waitForBytesWritten(1000);
        socket->waitForReadyRead(3000);
        qDebug() << "Reading: " << socket->bytesAvailable();
        qDebug() << socket->readAll();
        socket->close();
        return "Connected";
    }
So weit so gut. Nun dachte ich, dass ich alle Daten empfangen kann, welche der Server schickt, stelle ich auf eine Signal Slot Kommunikation um. Ich dachte, dass ich mit dem Signal ReadRead die Information erhalte, wenn neue Daten verfügbar sind und ich diese verarbeiten kann:

Code: Alles auswählen

    connect(socket, SIGNAL(connected()),this, SLOT(connected()));
    connect(socket, SIGNAL(disconnected()),this, SLOT(disconnected()));
    connect(socket, SIGNAL(bytesWritten(qint64)),this, SLOT(bytesWritten(qint64)));
    connect(socket, SIGNAL(readyRead()),this, SLOT(readyRead()));
 .... 
 void SocketTest::connected()
{
    qDebug() << "connected...slot";
    //   socket->write("<all/>");
} 
    
 void SocketTest::readyRead()
{
    qDebug() << "Reading: " << socket->bytesAvailable();
    qDebug() << socket->readAll();
}   
    
Nur leider funktioniert das überhaupt nicht. Ich habe versucht in den verschiedensten Foren Lösungen zu finden, aber leider schaffe ich es nicht. Sorry, wenn ich euch mit derart langweiligen Fragen nerve. Ich wäre euch wirklich dankbar, wenn ihr mir helfen könnt.....
Liebe Grüße,
Jürgen.

Re: XML Daten streamen

Verfasst: 19. Februar 2017 13:21
von Christian81
Da ein Stream keine Start/Ende oder sonstwelche Marken hat (und das hat nichts mit irgendwelchen Programmiersprachen etc zu tun), musst Du die empfangenen Daten puffern und selbst parsen. Für xml gibt es hier sogar von Qt noch eine Hilfsklasse - QXmlStreamReader

Re: XML Daten streamen

Verfasst: 19. Februar 2017 14:14
von guju
Hallo Christian!
Zuerst einmal danke, dass du mir geantwortet hast. Dass ich XMLStreamReader verwenden soll habe ich schon gelesen, aber ich habe noch eine Frage. Wie weiß ich, dann neue Daten ankommen, wenn ReadRead mir nur mitteilen, dass die Daten empfangen wurden....danke für deine nette Hilfe!
Bis dann,
Jürgen.

Re: XML Daten streamen

Verfasst: 19. Februar 2017 17:23
von Christian81
readyRead() wird immer emmittiert, wenn neue Daten da sind. Diese können dann mittels readAll() ausgelesen werden.

Re: XML Daten streamen

Verfasst: 3. März 2017 17:27
von guju
Hallo Christian!
Ich habe nun die letzten Wochen viel probiert, aber leider bekomme ich es nicht hin. Ich starte das ganze aus einem Dialog heraus. Zuerst dachte ich, dass das ein Problem ist, aber auch wenn ich es aus dem Mainwindow starte funktioniert der code leider nicht. Was brauchst du von mir, dass du sagen kannst, was ich falsch mache, oder wie würdest es du machen damit es funktioniert. Du würdest mir wirklich helfen, da ich es leider nicht hin bekomme. DANKE!!!
Liebe Grüße,
Jürgen.

Re: XML Daten streamen

Verfasst: 5. März 2017 08:42
von Christian81
Du solltest Dein Programm so weit vereinfachen bis es funktioniert - dann findet man auch den Fehler meist von allein.