Q3SocketDevice "No such file or directory" [QT Net

Alles rund um die Programmierung mit Qt
Antworten
Hazu
Beiträge: 12
Registriert: 7. Februar 2011 10:56

Q3SocketDevice "No such file or directory" [QT Net

Beitrag von Hazu »

[gelöscht]
Zuletzt geändert von Hazu am 4. März 2011 11:25, insgesamt 1-mal geändert.
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Beitrag von brax »

Zunächst eine wichtige Zeile aus der Doku zu Q3SocketDevice:
This class is part of the Qt 3 support library. It is provided to keep old source code working. We strongly advise against using it in new code. See Porting to Qt 4 for more information.
Ich nehme an, dass das Problem daran liegt, dass QT mit dem Flag -no-qt3support kompiliert wurde. Ich würde aber davon abraten, als Fix QT neu zu kompilieren, sondern die entsprechende QT4 Klasse zu benutzen (QTcpSocket/QUdpSocket). Die Sache mit dem Blockieren kannst Du durch geschickte SIGNAL/SLOT Veknüpfungen hinbekommen bzw. "emulieren".
aber ich kann keine einige netzwerk-klasse includieren, weder QTNetwork, noch QTSocket, noch Q§SocketDevice...
Die Headernamen "QTSocket" und "QTNetwork" sind nicht richtig (QNetwork, QTcpSocket / QUdpSocket).

EDIT: Noch etwas zum Thema Blockieren. Du hast nicht genau geschrieben, was dort blockiert werden soll. Wenn die gesamte Anwendung blockiert werden soll, ergibt der Einsatz von Threads wenig Sinn. Etwas mehr Information dazu und evtl. kann Dir jemand weiterhelfen, bzw. die richtigen Tipps geben.
Hazu
Beiträge: 12
Registriert: 7. Februar 2011 10:56

Beitrag von Hazu »

[gelöscht]
Zuletzt geändert von Hazu am 4. März 2011 11:25, insgesamt 1-mal geändert.
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Beitrag von brax »

Ja, hast recht, QtNetwork .... oops. Für die einzelnen Klassenheader ist aber das "t" (ob groß oder klein) zu viel.

EDIT: Also QTcpSocket selbst, wie Du ja wahrscheinlich gemerkt hast, hat keine speziellen Methoden. Er implementiert aber die Methoden von QAbstractSocket (und damit auch von QIODevice). Damit kannst Du arbeiten.

Dein Socket emitiert immer wenn Daten vorhanden sind ein Signal "readyRead". Im damit verbundenen Slot Deines Threads verarbeitest Du dann diese Daten. Solange das Signal nicht kommt "blockiert" der Thread (also er arbeitet nicht aktiv). Beachte dabei, dass der Thread eine eigene Eventloop braucht (siehe Doku und eine Forensuche sollte dazu auch was bringen). Ich hoffe, das hilft Dir schonmal weiter.

Eine Frage noch: ist das Protokoll, das der Server und der Client verwenden, eine "Eigenentwicklung" oder wird einfach per HTTP o.ä. kommuniziert? Evtl. wäre im zweiten Fall nämlich der QNetworkAccessManager die richtige Wahl.
Antworten