Bonjour,
Lorsque je connecte 3 clients, ou plus, ma classe qui correspond a un client change un de ses membre sans aucune raison
Pour faire court,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Session { public: inline const int GetSocket() const { return sock; } private: int sock; }Donc voila, entre la deuxieme boucle et la troisieme, la valeur de Target->GetSocket() change, voici un screenshot pour mieux comprendre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 //[... plus de code] ConnectedClients = Collection->AllSessions(); // copie par reference des clients // de type: std::map<int, Session*> if(Collection->Count() == 3) { std::cout << "I have now 3 clients connected, let's echo their socket number !"<<std::endl; ConnectedClients = Collection->AllSessions(); for(auto itr = ConnectedClients.begin(); itr != ConnectedClients.end(); ++itr) { Target = itr->second; // de type Session* sock = itr->first; std::cout << "Key: " << sock << " & Session*->sock = " << Target->GetSocket() << std::endl; } } for(auto itr = ConnectedClients.begin(); itr != ConnectedClients.end(); ++itr) { Target = itr->second; sock = itr->first; std::cout << "Loop over : " << Target->GetSocket() << std::endl; //[... plus de code]
edit:
J'ai ajouté en plus dans le code un std::cout sur l'adresse de Target pour voir si elle ne changait pas en cours de route, non elle est toujours bonne. Donc c'est bien le int sock; qui change d'un coup... !
Evidemment, le reste du programme plante salement à cause de ca..
Si vous avez des idées, je suis preneur!
merci, nico
Partager