Probléme socket du serveur.

jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011 - 6 déc. 2009 à 21:54
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 12 déc. 2009 à 19:24
Bonsoir,

Actuellement je commence a apprendre la programmation réseau et j'ai un peut du mal a tous comprendre, j'ai donc commencé a analyser le fonctionnement de plusieurs source de se site, et j'en est trouver seulement une asser simple pour moi.

source

le problème c'est qu'il y as pas mal de bug dans cette source et que je n'arrive pas a les corriger, le plus gênant étant le plantage de la partit serveur quand plusieurs client se déconnecte.

J’ai essayer le débogage mais je n'est pas réussi a trouver d'ou cela peut venir.

est-ce que quelqu'un pourrait m'aider ou me donner une piste sur ce problème?

Merci d'avance

Jérémy

11 réponses

lural Messages postés 131 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 4 janvier 2011 2
7 déc. 2009 à 09:48
Bonjour,

Pour te donner des pistes de réflexions ou t'aider à débugguer, il nous faudrait voir un peu les codes d'erreurs retournés lorsque ça "plante" et savoir comment tu y es arrivé. Si le code est simple, il n'est pas forcément complet et ne gère pas tout les cas, donc si tu peux nous en dire plus sur tes erreurs ...

Bye
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
7 déc. 2009 à 12:25
Il y a pas mal de bug dans ce code mais le seul qui m'intéresse vraiment est quand on déconnecte les clients.

Donc pour arriver a ce bug cela est tous simple :

- lancer le serveur
- lancer 2 clients et les connecter au serveur
- déconnecter les deux clients et la le serveur plante

J’ai remarquer que le serveur planter quand on déconnecte le premier client qui c'est connecter et que si on ne connecte que 1 seul client on peut le connecter et déconnecter sans que cela pause de problème
Je pense que cela viens d'un problème de thread mais je n'arrive pas vraiment a bien définir d'ou.

Donc quand le serveur plante cela me marque

[b]Program : ...ocuments\Visual Studio 2008\Projects\Socket\Debug\Serveur.exe
File:f:\dd\vctools\crt_bld\selfx86\crt\src\dbgheap.c
Line: 1317

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion failure, see the Visual C++ documentations on asserts.

(Press Retry to debug the application)/b

Cela fait 1 semaine que je suis sur ce problème je vous remercie d'avance pour votre aide
et excuser moi d’avance si l'erreur est flagrante je débute dans ce domaine.

jérémy
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
7 déc. 2009 à 18:00
Euh,

tu peux remonter le pile d'appel et nous montrer la ligne de ton code qui plante ?

Mais à mon avis, tu as un pb de mémoire, peut-etre que ton buffer de réception n'est pas aussi grand et il jardine la mémoire et fait pèter le programme.
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
7 déc. 2009 à 18:37
Le problème c'est que quand je fait un débogage pas a pas cela ne le fait pas donc je n'arrive pas a savoir d'ou cela viens.

J’essaye de corriger une source du site pour m'en inspirer et comprendre les sockets donc elle est disponible si tu veux essayer.

http://www.cppfrance.com/code.aspx?ID=29277

J’ai tous essayer et il n'y a pas moyen de savoir
jérémy
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
8 déc. 2009 à 01:07
ou si quelqu'un a un lien vers une source du méme type et trés simple a compprendre?

jérémy
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
8 déc. 2009 à 11:37
Tu n'es pas obligé de faire du pas à pas !
Moi, je laisse exécuter le programme, et quand il plante, le débugger Visual fait apparaitre une boite de dialogue avec 3 bouton (Abort/Retry/Ignore) si tu cliques sur Retry tu entres en debug.
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
8 déc. 2009 à 20:47
Exception de première chance à 0x770f64cf dans Server.exe : 0xC0000008: An invalid handle was specified.

pile des apel j'ai une fléche verte avec marquer : Server.exe!Echo(void*param=0x00000068) Ligne 161 + 0xe octets

aprés avoir appuyer sur continuer :

Exception non gérée à 0x770f64cf dans Server.exe : 0xC0000008: An invalid handle was specified.

et méme message dans pile des apel

jérémy
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
9 déc. 2009 à 08:49
void*param=0x00000068 ca sent un pointeur nul quelque part avant l'appel de cette fonction.

Peux-tu mettre le code de l'appel de Echo, dans la source il y a un truc horrible :
New_Sock = new SOCKET;
New_Sock[Cnx] = accept(Sock, (struct sockaddr*) NULL, (int *) NULL);


Il alloue un "SOCKET" mais par contre il en stocke Cnx, dès le 2e clients connecté ça peut planter.

En plus je ne vois pas la déclaration de New_Sock.

Essayons un truc simple :
SOCKET New_Sock[10];

while(bContinue)
{
Cnx++;
New_Sock[Cnx] = accept(Sock, (struct sockaddr*) NULL, (int *) NULL);
printf("Client connecte. ( %d total )\n", Cnx);

hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Echo, (LPVOID)New_Sock[Cnx], 0, &dwThread);
} 


Dans mon cas, au 11e clients, ca va merder.

Tu as un autre exemple de code simple ici
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
9 déc. 2009 à 21:45
non sa merde des que le 1er client se connecte.

j'ai déja vu la source que tu m'indique mais elle ne marche pas, je n'est pas trouver mieu que celle que j'utilise actuellement.


jérémy
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
10 déc. 2009 à 09:47
Oups, j'avais pas vu !!
Cnx++; doit être après
New_Sock[Cnx] = accept(Sock, (struct sockaddr*) NULL, (int *) NULL);

Après va falloir que tu postes un peu de ton code pour voir les autre pbs.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
12 déc. 2009 à 19:24
salut,
je vois que ça ne change pas beaucoup par ici, les gens continuent de poster des codes sources sur les socket bancales, et ceux qui s'en servent postent toujours des messages en se demandant pourquoi ça ne fonctionne pas.
pourquoi ne pas étudier les vrai exemples fiables que l'ont trouve dans les bouquins ?
a mon avis, la reference:
http://betouchi.free.fr/doc_et_ebook/prog_reseau/network2.chm
avec les exemples:
http://betouchi.free.fr/doc_et_ebook/prog_reseau/exemples-network2.zip
0
Rejoignez-nous