Ergebnis 1 bis 3 von 3

Thema: [C++/Qt] Socket macht XML für den Parser unlesbar ...

  1. #1
    Shogun Avatar von DarkSyranus
    Registriert seit
    28.03.2006
    Ort
    ::1/128
    Alter
    25
    Beiträge
    3.446
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard [C++/Qt] Socket macht XML für den Parser unlesbar ...

    ... oder wie man klein Darky ganz langsam in den Wahnsin treibt ... egal.
    Um dem normalen Informatik Unterricht zu entkommen nehme ich dieses Jahr wieder an der Software Challenge teil, das dies immer ganz lustig ist und eine Menge Pluspunkte beim Lehrer einbringt.
    Dabei gibt es einen Spielserver und die armen Schüler müssen einen Client schreiben, der diese Spiel spielen kann. Zur Übertragung wird ein XML ähnliches Protokoll verwendet, dass zwar nicht ganz dem Standart entspricht, allerdings mit den Parsern kompatibel ist.

    Nun kam folgendes Problem zu Stande:
    Ich nutze Qt als Framework um einerseits vorgefertigte Teile zu haben, andererseits auch, da der Client auf Windows / Linux parallel entwickelt wird und es so einfach einfacher ist.
    Grundidee: Ein QTcpSocket dient als Verbindung zum Spielserver. Daraus wird nun direkt durch einen QXmlStreamReader der Xml Code interpretiert.
    Der Spielserver ist jedoch etwas zickig, er bricht Spaßeshalber so mitten im Protokoll ab um dann weiter zu senden, was jedoch leider den Effekt hat, dass man so nicht direkt lesen kann.

    So werden nun also die Daten ausgelesen und dem Parser zugeführt.
    Code:
    void SimpleAI::readMessage() {
     #ifdef _VERBOSE
       // debug output
       std::cout << "-> SimpleAI::readMessage() begin" << std::endl;
     #endif
    
        // warten bis ein neuer Datensatz ankommt
       this->interface->waitForReadyRead(5000);
    
        // Zwischenspeicher für die Daten
       QByteArray buffer;
    
        do {
         buffer += this->interface->readAll();
       } while(this->interface->waitForReadyRead(100));
       
     
      // Daten werden an den Parser übergeben
       this->addData(buffer);
    
      #ifdef _VERBOSE
       // debug output
       std::cout << "-> SimpleAI::readMessage() end" << std::endl;
     #endif
     }
    Dies funktioniert in sofern auch, als dass die Daten ankommen und ordentlich zusammengesetzt sind. Beim interpretieren bricht er mit folgender Fehlermeldung ab.
    Expected charakter data.
    Wenn man allerdings die spaßige Idee hat, obiges QByteArray über cout auszugeben, die Ausgabe kopiert und in eine Datei einfügt, kann der Parser die ohne Probleme lösen. Schreibt man sie jedoch direkt aus dem QByteArray in eine Datei, kann er diese nicht lesen.


    Irgendwer irgendwelche Vorschläge wie man dies nun lösen kann, ich komm da grad einfach nicht weiter.
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: [C++/Qt] Socket macht XML für den Parser unlesbar ...

    Ich frage mich, warum du den QXmlStreamReader nicht direkt die Socket übergibst...
    Code:
    QTcpSocket socket;
    QXmlStreamReader reader(&socket);
    ...
    Viele liebe Grüße
    The User

  3. #3
    Shogun
    Themenstarter
    Avatar von DarkSyranus
    Registriert seit
    28.03.2006
    Ort
    ::1/128
    Alter
    25
    Beiträge
    3.446
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: [C++/Qt] Socket macht XML für den Parser unlesbar ...

    Ok, Problem gelöst
    Es ist natürlich überaus dämlich aus einem leeren Element etwas rauslesen zu wollen ~.+
    Allerdings hätten sie schon ne bessere Meldung implementieren können ...

Ähnliche Themen

  1. XML-Parser verschluckt sich an Kaufmannsund
    Von vbtricks im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 02.11.2009, 21:11
  2. Punkt vor Strich-Rechnung beim parser mit C#
    Von Aron im Forum Forum für alle anderen Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 19.06.2009, 22:49
  3. Perl Socket Problem
    Von Krusty im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 0
    Letzter Beitrag: 05.08.2008, 01:24
  4. Socket-Server beendet sich selbst?
    Von JanuaR im Forum Forum für alle anderen Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 01.08.2008, 15:28
  5. Socket Error # 10053
    Von canim im Forum Computer - Internet Forum
    Antworten: 1
    Letzter Beitrag: 19.05.2007, 19:16

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •