Seite 1 von 1

empfangen mit den TcpSockets

Verfasst: 6. Mai 2009 10:51
von Hannes W
Ich bins mal wieder und habe ein neues Problem..
ich habe ja schon ein Thema zum senden mt den Sockets geöffnet und das Problem gelöst, nun möchte ich mit meinen Sockets etwas empfangen, das der Server mir sendet.
Das Problem ist das ich nicht weiß wie das gehen soll, ich hoffe ihr könnt mir helfen.
Liebe Grüße

Verfasst: 6. Mai 2009 11:06
von AuE
Ich wette dir wird gleich der Link zur Doku gepostet.....

es sei denn du schreibst mal wo es hapert.

Ansonsten kann ich dir auch meine Bankverbindung senden wenn ichs dir proggen soll ;-) Spass beiseite... Dir wird hier keiner was proggen. Wir geben sicher gerne Hilfestellung nur wenn du nicht ein kleinwenig zeigst was du hat wo es hapert wird das schwierig!

Verfasst: 6. Mai 2009 11:12
von Hannes W
Mh der Link wär garnicht so schlecht, wenn ich es da nachsehen kann ..

also mein Problem ist das ich keine Ahnung habe welche Befehle ich brauche, da das senden zu dem Server nicht mit den QDataStreams ging danke ich auch nicht das das empfangen damit funktionieren wird.
Also mir würde schon eine kleine "Starthilfe" sehr viel bringen, glaube ich.

Verfasst: 6. Mai 2009 11:25
von AuE
schau dir doch mal das Fortune Client Example an....

da hab ich folgendes gefunden
The only QTcpSocket signals we need in this example are QTcpSocket::readyRead(), signifying that data has been received, and QTcpSocket::error(), which we will use to catch any connection errors:
...
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readFortune()));
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
...
}
wenn ich mir dann noch die Doku zu den TCP Sockets ansehe.... dannn schaue ich mir an was TCPSocket für Signale sendet... da komme ich dann zu denen aus QIODevice:
Signals
void aboutToClose ()
void bytesWritten ( qint64 bytes )
void readChannelFinished ()
void readyRead ()
1 signal inherited from QObject

So und wenn man dann in der Doku des Fortune Clients weiter schaut... findet man die Methode die aufgerufen wird wenn das readyRead Signal ausgelöst wird:

Code: Alles auswählen

void Client::readFortune()
 {
     QDataStream in(tcpSocket);
     in.setVersion(QDataStream::Qt_4_0);

     if (blockSize == 0) {
         if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
             return;

         in >> blockSize;
     }

     if (tcpSocket->bytesAvailable() < blockSize)
         return;

Verfasst: 6. Mai 2009 11:27
von franzf
Die Doku zum QTcpServer kennst du doch sicher, oder?
Assistant (resp. http://doc.trolltech.com/4.5). Da gibts ein "see also".
Z.B. die Fortune Client/Server examples. Da siehst du wie man Daten sendet und empfängt.

Ich hoffe das hilft.

Verfasst: 6. Mai 2009 11:34
von AuE
ha....war schneller ;-)

Verfasst: 6. Mai 2009 11:36
von franzf
Du musstest ja auch nicht 4 mal neu anfangen, weil dir ne Katze in die Tastatur gesprungen ist :P

Verfasst: 6. Mai 2009 11:41
von AuE
ach.... immer diese ausreden....meine Weinbergschnecke war auch nicht hilfreich:-D

aber wiedereinmal zeigt sich.... eigentlich steht doch alles in der Doku... ich hab noch nie was mit den Sockets gemacht. Aber einfach mal die Demos aufgemacht-Networking... gut dann muss man suchen wo da TcpSockets verwendet werden... aber das sind etl 5 versuche. Dann hab ich den Fortune und dann stehts dort direkt wie´s geht. Was ist daran nur so schwer....