XML Daten streamen

Alles rund um die Programmierung mit Qt
Antworten
guju
Beiträge: 3
Registriert: 18. Februar 2017 22:59

XML Daten streamen

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: XML Daten streamen

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
guju
Beiträge: 3
Registriert: 18. Februar 2017 22:59

Re: XML Daten streamen

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: XML Daten streamen

Beitrag von Christian81 »

readyRead() wird immer emmittiert, wenn neue Daten da sind. Diese können dann mittels readAll() ausgelesen werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
guju
Beiträge: 3
Registriert: 18. Februar 2017 22:59

Re: XML Daten streamen

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: XML Daten streamen

Beitrag von Christian81 »

Du solltest Dein Programm so weit vereinfachen bis es funktioniert - dann findet man auch den Fehler meist von allein.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten