Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1522 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [QT3] Methode bloquante reception QSocket

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[QT3] Methode bloquante reception QSocket

n°1339114
ducseb
Posté le 04-04-2006 à 20:02:59  profilanswer
 

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 !!  
 :jap:  :jap:


Message édité par ducseb le 04-04-2006 à 20:03:41
mood
Publicité
Posté le 04-04-2006 à 20:02:59  profilanswer
 

n°1339129
nargy
Posté le 04-04-2006 à 20:41:15  profilanswer
 

Il y a un exemple de client-serveur fourni avec Qt.
Tu pourrait lire la doc:
Q_ULONG waitForMore ( int msecs, bool * timeout ) const

n°1339137
ducseb
Posté le 04-04-2006 à 20:50:22  profilanswer
 

Désolé j'ai vu cette methode juste après avoir posté  :ange:  :ange:  
mais super merci a toi nargy je vais de suite testé si ca marche bien

n°1339276
IrmatDen
Posté le 04-04-2006 à 23:30:49  profilanswer
 

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

n°1339290
nargy
Posté le 04-04-2006 à 23:49:54  profilanswer
 

> 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.

n°1339294
IrmatDen
Posté le 04-04-2006 à 23:52:46  profilanswer
 

Bah ouais, mais comme je l'ai jamais testée (vu qu'elle est déconseillée :D ) et que tu lui conseillais, je voulais juste être sûr ;)

n°1339296
nargy
Posté le 04-04-2006 à 23:59:02  profilanswer
 

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...

n°1339307
ducseb
Posté le 05-04-2006 à 00:13:59  profilanswer
 

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 :
  1. bool ClientSocketQT::emission(QString info)
  2. {
  3. std::cout<<"Debut envoi\n";
  4. QTextStream os(this);
  5.         os <<info<<endl;
  6. std::cout<<"Envoi OK\n";
  7. this->waitForMore(3000);
  8. std::cout<<"Recupération des données\n";
  9. std::cout<<"Methode fin attente\n"<<endl;
  10. std::string reponseInitialisation=this->readLine();
  11. std::cout<<"Réponse du serveur:"<<reponseInitialisation<<"\n";
  12. return true;
  13. }


 
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.

n°1339317
nargy
Posté le 05-04-2006 à 00:31:02  profilanswer
 

c'est:
waitForMore(-1)
 [:chatigret] tu devrai peut être potasser un poil la doc Qt ;)

n°1339318
nargy
Posté le 05-04-2006 à 00:32:29  profilanswer
 

Code :
  1. QTextStream os(this);
  2.        os <<info<<endl;


heu...là tu envoie tes infos dans le vent!

mood
Publicité
Posté le 05-04-2006 à 00:32:29  profilanswer
 

n°1339382
ducseb
Posté le 05-04-2006 à 07:27:38  profilanswer
 

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()


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [QT3] Methode bloquante reception QSocket

 

Sujets relatifs
formulaire perte des données de l'url avec methode getquestion de sale noob : incrementer depuis une methode
[C#] appel d'une méthode de classe mèreCréer une méthode qui renvoie un vector à deux dimensions.
Javascript : Mozilla et méthode click()Méthode pour écrire dans un fichier ofstream
problème avec la méthode post d'un formulaireenvoi et reception d'emails
méthode de gestion d'une BD en POO (PHP5)[PHP5] fonction qui liste les paramètres d'une méthode de classe
Plus de sujets relatifs à : [QT3] Methode bloquante reception QSocket


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR