Seite 1 von 1

[Solved] QTcpSocket keine Reaktion

Verfasst: 21. November 2008 06:25
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

Verfasst: 21. November 2008 06:31
von Christian81
Läuft auch wirklich ein QtTcpServer auf Port 49363?

Verfasst: 21. November 2008 06:32
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.

Verfasst: 21. November 2008 07:01
von Christian81
Gerade getestet - bei mir kommt ein readyRead().
Denke dran dass der Fortuneserver immer irgend einen Port benutzt und nicht immer den selben.

Verfasst: 21. November 2008 07:06
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. :)