Methode bloquante reception QSocket [QT3] - C++ - Programmation
Marsh Posté le 04-04-2006 à 20:41:15
Il y a un exemple de client-serveur fourni avec Qt.
Tu pourrait lire la doc:
Q_ULONG waitForMore ( int msecs, bool * timeout ) const
Marsh Posté le 04-04-2006 à 20:50:22
Désolé j'ai vu cette methode juste après avoir posté
mais super merci a toi nargy je vais de suite testé si ca marche bien
Marsh Posté le 04-04-2006 à 23:30:49
A tout hasard, cette méthode ne bloquerait-elle pas aussi les événements systèmes comme les repaint etc... ?
Si c'est le cas, tu pourrais faire chronologiquement:
1. le client émet une requête vers ton serveur
2. Tu bloques les input events (l'appli répondra ainsi toujours présent au système)
3. Tu te bases sur l'émission du signal readyRead() pour lire tes données
4. Tant que les données reçues ne contiennent pas la balise de fin ou la quantité de donnée attendue (selon le shéma que tu comptes utiliser), tu continue de lire, et les input events sont toujours bloquées (BTW, pense à un sablier ou à une progress bar configurée en "busy indicator"
5. Tu as lu tout ce que tu attendais, tu réactives les user inputs
Marsh Posté le 04-04-2006 à 23:49:54
> A tout hasard, cette méthode ne bloquerait-elle pas aussi les événements systèmes comme les repaint etc... ?
- A tout hasard, non, c est sûr! elle est même explicitement déconseillée dans la doc de Qt.
Marsh Posté le 04-04-2006 à 23:52:46
Bah ouais, mais comme je l'ai jamais testée (vu qu'elle est déconseillée ) et que tu lui conseillais, je voulais juste être sûr
Marsh Posté le 04-04-2006 à 23:59:02
perso, je lui conseillerai pas non plus, mais bon j avais pas envie que ce topic se transforme en discussion sur l utilisation des sockets bloquantes ou non...
Marsh Posté le 05-04-2006 à 00:13:59
C'est clair que ce n'est pas un solution pratique mais pour les slot je galere un peu vu que je suis pas trop habitué à QT en fait !
Sinon j'ai testé avec le waitForMore mais ca ne marche pas top voila le code que j'ai ecrit :
Code :
|
Mais ca ne marche meme pas ca fait le wait de 3sec (le serveur mais moins de temps à repondre normalement,moins de 0.5s) puis après il ne receptionne rien sur le readline.
Marsh Posté le 05-04-2006 à 00:31:02
c'est:
waitForMore(-1)
tu devrai peut être potasser un poil la doc Qt
Marsh Posté le 05-04-2006 à 00:32:29
Code :
|
heu...là tu envoie tes infos dans le vent!
Marsh Posté le 05-04-2006 à 07:27:38
NOn ca marche ca, le serveur recoi bien les informations (this il est de type QSocket)
Sinon pour le waitFoMore(-1) au debut je mettais ca mais le programme reste en attente car il n'arrive pas à envoyé
Il passe :
QTextStream os(this);
os <<info<<endl;
qui normalement est censé envoyé les infos sur le serveur sauf que ca n'envoi pas le serveur receptionne les infos uniquement après le waitForMore()
Marsh Posté le 04-04-2006 à 20:02:59
Bonjour,
J'aimerais un petit peu d'aide car je galere un petit peu.
DAns le cadre d'un projet je dois faire un client serveur en C++
J'utilise pour ca les classe QT (Après avoir utilisé les methode C standart style accept,bind,listen,sento,recvto ,etc....)
Mon serveur fonctionne bien
Mais le client à un problemme enfin non c'est moi qui est problemme pour le codé lol
Je cherche a faire en sorte que le client se bloque comme pour les methode en C quand je dois recevoir
une informations du reseaux.
Actuelement je n'ai trouvé aucune methode dans QSocket (peu etre mal chercher) qui réussise à blocké l'appli tant que
rien n'est à lire j'ai juste réussi a faire fonctionné l'exemple de QT Assistant et le modifié un peu pour qu"il intégre mais methode
spécifique.
Si qqn à une idée pour mon problemme je suis prenneur Merci !!
Message édité par ducseb le 04-04-2006 à 20:03:41