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

  FORUM HardWare.fr
  Programmation
  C++

  Winsock et Threads (Boost) : Problème

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Winsock et Threads (Boost) : Problème

n°885803
Imhotep
Le monde est mon huître !!!
Posté le 29-10-2004 à 14:21:33  profilanswer
 

Salut
 
Je fais un test avec Winsock et Boost pour les threads. Mais j'ai un problème.
 
Le code suivant fonctionne très bien :

Code :
  1. void main(int argc, char *argv[])
  2. {
  3. std::cout << "running....\n";
  4. try
  5. {
  6.  // Create the socket
  7.  ServerSocket server ( 30000 );
  8.  int i = 0;
  9.  boost::thread_group thrds;
  10.  while ( true )
  11.  {
  12.   ServerSocket new_sock;
  13.   server.accept ( new_sock );
  14.   try
  15.   {
  16.    while ( true )
  17.    {
  18.     std::string data;
  19.     s >> data;
  20.     if (data != "" )
  21.     {
  22.      std::cout << "data recieved....\n";
  23.      s << data;
  24.      std::cout << "data sent....\n";
  25.     }
  26.    }
  27.   }
  28.   catch ( SocketException& e)
  29.   {
  30.    [...]
  31.   }
  32.  }
  33. }
  34. catch ( SocketException& e )
  35. {
  36.  [...]
  37. }
  38. }


 
Alors que celui-ci plante:

Code :
  1. void listener(ServerSocket& s)
  2. {
  3. std::cout << "thread started.... \n";
  4. try
  5. {
  6.  while ( true )
  7.  {
  8.   std::string data;
  9.   s >> data;
  10.   if (data != "" )
  11.   {
  12.    std::cout << "data recieved....\n";
  13.    s << data;
  14.    std::cout << "data sent....\n";
  15.   }
  16.  }
  17. }
  18. catch ( SocketException& e)
  19. {
  20.  [...]
  21. }
  22. }
  23. void main(int argc, char *argv[])
  24. {
  25. //cin cout cerr << "After print" << endl;
  26. //Socket *so = new Socket();
  27. std::cout << "running....\n";
  28. try
  29. {
  30.  // Create the socket
  31.  ServerSocket server ( 30000 );
  32.  int i = 0;
  33.  boost::thread_group thrds;
  34.  while ( true )
  35.  {
  36.   ServerSocket new_sock;
  37.   server.accept ( new_sock );
  38.   boost::thread thrd(boost::bind(&listener, new_sock));
  39.   thrd.join();
  40.  }
  41. }
  42. catch ( SocketException& e )
  43. {
  44.  [..]
  45. }
  46. }


 
Socket est un type que j'ai créé.
 
Le thread se créé mais le programme semble incapable de recevoir des données par le réseau.
 
J'ai juste essayé de créé un thread pour faire une opération très simple. Peut-être est-ce un problère de pointeur, j'avoue que les pointeurs restent un peut flous pour moi.
 
Quelqu'un qurait-il une idée du problème ?
 
Merci


Message édité par Imhotep le 29-10-2004 à 14:23:21
mood
Publicité
Posté le 29-10-2004 à 14:21:33  profilanswer
 

n°885816
Lam's
Profil: bas.
Posté le 29-10-2004 à 14:28:17  profilanswer
 

Et ça marche si tu appelles directement
listener(new_sock); en ligne 45 ?
 
De toutes façons, c'est péché de passer des références sur des variables locales à d'autres threads, donc quand tu enlèveras le join, ton code merdera...
 
Et sinon, ça t'affiche quoi exactement ? Le programme se lock ? Il sort tout seul ?
 

n°885835
Imhotep
Le monde est mon huître !!!
Posté le 29-10-2004 à 14:42:08  profilanswer
 

Lam's a écrit :

Et ça marche si tu appelles directement
listener(new_sock); en ligne 45 ?


Ah, très bonne question.  
Après test, ca marche.
Alors je sais pas d'où ca viens le problème...
 

Citation :

De toutes façons, c'est péché de passer des références sur des variables locales à d'autres threads, donc quand tu enlèveras le join, ton code merdera...
 
Et sinon, ça t'affiche quoi exactement ? Le programme se lock ? Il sort tout seul ?


En fait j'ai un client qui envoie un message, et le serveur lui renvoie simplement. Mais là il me sort une exception me disant qu'il n'a pa pu lire sur le socket. Alors il s'arrète.
 
Parce qu'en fait je veux faire un programme qui fait serveur, mais je ne sais pas du tout quelle architecture je dois donner à mon programme, ni combien de threads utiliser.

n°885872
Lam's
Profil: bas.
Posté le 29-10-2004 à 15:15:59  profilanswer
 

Je ne connais pas ton code, mais essaye de passer un type socket_id (plutôt qu'une référence ou autres) à la foncton "listener", et dedans, construit ton object Socket à partir du socket_id. Ca devrait nous dire s'il y a des problèmes au niveau de ton code ou si c'est autre chose...


Message édité par Lam's le 29-10-2004 à 15:16:18

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

  Winsock et Threads (Boost) : Problème

 

Sujets relatifs
Probleme config openwatcom setvars.batProblème map area et css
Probleme de RecordsetRollover en CSS, probleme sous IE [ impossible, merci IE ]
Probleme pour installer Micropaiement sur FREEproblème: html2fpdf
Bizarerie: Problème de passage paramètre à une api[Javascript] Problème de récupération de variable dans un menu dynamiq
Probleme pour utiliser une DLL sous BCB[CSS ] probleme sur balises Li // résolu
Plus de sujets relatifs à : Winsock et Threads (Boost) : Problème


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