Ich muss Binärdaten über QTcpSocket
senden. Ich habe über QDataStream
nachgedacht, aber ich habe ein Problem festgestellt - es schlägt automatisch fehl, wenn zu dem Zeitpunkt, an dem ich versuche zu lesen, keine Daten angekommen sind.
Zum Beispiel, wenn ich diesen Code habe:
%Vor%Es wird automatisch fehlschlagen, wenn keine Daten im Socket vorhanden sind. Gibt es eine Möglichkeit, es stattdessen zu blockieren?
Das Problem ist ein bisschen ernster. Socket kann Daten in Blöcken empfangen. Selbst wenn Sie auf waitForReadyRead
warten, kann es fehlschlagen, da nicht genügend Daten vorhanden sind, um ein Objekt sofort zu lesen.
Um dieses Problem zu lösen, müssen Sie zunächst eine Datengröße und dann die eigentlichen Daten senden.
Sende den Code:
Am Empfänger müssen Sie warten, bis die Größe der verfügbaren Daten die Anforderung erfüllt. Der Empfängercode sieht mehr oder weniger so aus:
%Vor%kleines Update, basierend auf der Dokumentation ist es möglich, QString zu lesen, ohne zusätzliche Größeninformationen hinzuzufügen, Da QString an QDataStream übergeben wird, enthält die Größe Informationen. Die Größe kann wie folgt überprüft werden: %Vor%
Sie können die Funktion QTCPSocket :: waitForReadyRead aufrufen, die solange blockiert, bis Daten verfügbar sind, oder eine Verbindung zum readyRead () - Signal herstellen und beim Aufruf des Steckplatzes den Stream lesen.
Tags und Links c++ qt qtcpsocket