[Solved] QTcpSocket keine Reaktion

Alles rund um die Programmierung mit Qt
Antworten
gwydion.dot
Beiträge: 9
Registriert: 18. März 2008 20:43

[Solved] QTcpSocket keine Reaktion

Beitrag von gwydion.dot »

Lösung:

Es scheint das Visual Studio im Debug-Modus die Connects nicht sauber ausführt. Im Release-Modus geht es wunderbar.



Guten Tag zusammen


Ich habe (wieder) mal ein Problem mit einem Connect und ich verstehe absolut nicht warum ich dieses Problem habe.


Problem:

SIGNAL(readyRead())
SIGNAL(error(QAbstractSocket::SocketError))

Werden ignoriert und melden sich nicht mehr, daher QTcpSocket looped vor sich hin ohne Ergebniss.


connect:

Code: Alles auswählen

	tcpSocket = new QTcpSocket(this);

	connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readAnswer()));
	connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)));

header:

Code: Alles auswählen

	private slots:
		void tcpConnect();
		void createNewAccount();
		void login();
		void readAnswer();
		void displayError(QAbstractSocket::SocketError socketError);
Die connects geben mir true zurück und damit sollten sie verbunden sein.
Ich habe mir einen "Test-Kopf" gemacht und auch mit connect an tcpConnect() gebunden. Dieser Connect geht wunderbar.

Ich habe das Beispiel vom Fortune-Client genommen und es abgeleitet.
Statt der Vererbung von QDialog, nahm ich QWidget. Der Rest wurde dem Beispiel entnommen.


Anbei habe ich noch die Dateien angehängt.
Es handelt sich um QT4 welches unter Visual Studio kompliert wurde. Alle nötigen Abhängigkeiten sind eingebunden und werden vom Linker sauber erkannt.

As a result of calling connectToHost(), one of two things can happen:
The connection is established. In this case, the server will send us a fortune. QTcpSocket will emit readyRead() every time it receives a block of data.
An error occurs. We need to inform the user if the connection failed or was broken. In this case, QTcpSocket will emit error(), and Client::displayError() will be called.
Daher eine Meldung müsste ich bekomme, da eines der Beiden aufgerufen werden muss.


Gruss und Danke für Hinweise
gwydion
Dateianhänge
tcpclient.cpp
tcpclient.cpp
(1.92 KiB) 77-mal heruntergeladen
tcpclient.h
tcpclient.h
(581 Bytes) 94-mal heruntergeladen
main.cpp
main.cpp
(447 Bytes) 81-mal heruntergeladen
Zuletzt geändert von gwydion.dot am 21. November 2008 07:20, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Läuft auch wirklich ein QtTcpServer auf Port 49363?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
gwydion.dot
Beiträge: 9
Registriert: 18. März 2008 20:43

Beitrag von gwydion.dot »

Christian81 hat geschrieben:Läuft auch wirklich ein QtTcpServer auf Port 49363?
Guten Morgen


Ja, der Fortune-Server läuft auf diesem Port. Mit dem original Fortune-Client bekomme ich auch eine Antwort.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Gerade getestet - bei mir kommt ein readyRead().
Denke dran dass der Fortuneserver immer irgend einen Port benutzt und nicht immer den selben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
gwydion.dot
Beiträge: 9
Registriert: 18. März 2008 20:43

Beitrag von gwydion.dot »

Christian81 hat geschrieben:Gerade getestet - bei mir kommt ein readyRead().
Denke dran dass der Fortuneserver immer irgend einen Port benutzt und nicht immer den selben.
Hi


Danke fürs Testen. Ja ich weiss das er einen zufälligen Port nimmt. Deswegen habe ich es noch extra mit dem original Client versucht.

Dann muss wohl ein Problem mit Visual Studio vorliegen. Ich werde nochmals das Projekt untersuchen. Werde mich melden sobald ich den Fehler gefunden habe.

Danke für deine Hilfe und einen schönen Freitag noch. :)
Antworten