|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 5 ![]() |
Bonjour à tous , voila je vous contact suite a un problème que j'ai depuis bientôt 1 mois , j'ai fait un programme qui lance une socket sur un serveur irc en c++ avec une interface QT , le robot se lance correctement mais plante quelques secondes après voici les deux codes
Code :
Pouvez vous m'aider ? Merci |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Développeur informatique Inscription : décembre 2011 Messages : 1 250 ![]() |
salut,
l'indentation est horrible! Utilise la balise [CODE] : ![]() pour le reste c'est aussi compliquer de savoir pourquoi le robot plante. quand il plante tu es dans quelle partie de code côté serveur ? (en gros, dans la boucle while ou tu es déjà sorti) |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() |
+1 mala92.
Quelques hypothèses possibles (lecture rapide du code): - ton socket n'est pas connecté, - vérifie les options de select(): il se peut qu'elle se bloque tant que le descripteur n'est pas prèt pour la lecture, - on essaie de lire sur un socket dejà fermé par close(). |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 5 ![]() |
La socket se connecte très bien au serveur , je pense que ça vient de la while mais pourquoi ça , j'en sais rien , le compilateur me dit que tout est ok pourtant ça plante quand même
|
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 5 ![]() |
Code :
|
||
|
|
00
|
|
|
#6 | |
|
Membre habitué
![]() |
Citation:
Je trouves normal si mala92 se pose la question "dans quelle partie de code côté serveur ?". En effet, - si le socket n'est pas connecté alors le serveur se bloque à l'appel de accept() en attendant la connexion d'un client. Mais comme max21 l'a fait remarqué, cette hypothèse est fausse; - comme je sais pas sur quel OS le programme fonctionne, j'ai pris le manuel de NetBSD pour select() comme documentation de référence: d'après le manuel, lorsque le dernier paramètre de select() est NULL, alors select() se bloque indéfiniment tant que ssocket2 n'est pas prèt pour la lecture (tant que le client connecté n'envoie rien au serveur selon mon interprétation); - enfin, select() pourrait envoyer une erreur si ssocket2 est déjà fermé avec close() (quelque chose du genre Bad File Descriptor sur errno si je me souviens bien): c'est msgbuffer() qui ne quitte pas la boucle while me fait penser à cela. |
|
|
|
00
|
|
|
#7 | |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 5 ![]() |
Citation:
Merci pour ta réponse rakakabe , je suis sous Windows 7 et j'utilise qt creator |
|
|
|
00
|
|
|
#8 | ||||
|
Membre habitué
![]() |
Juste quelques remarques (par rapport au premier post):
A la ligne 7, je comprends pas bien ce que tu veux faire: Peut-être il y a un problème avec ce buffer. Par ailleurs essaie de vérifier les valeurs de retour de msgbuffer() dans ta boucle while (condition de sortie de cette boucle): Dans les lignes 56 - 59: Code :
alors que dans les lignes 67 - 74: Code :
Le mieux c'est d'éxécuter ton code par étape pour voir où cela plante. |
||||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 5 ![]() |
Bonjour
Je viens de trouver ; le problème était simple enfaite , l'application ne géré pas l'interface Qt et le socket en même temps , un thread a résolu mon problème A plus |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com