Client déconnecté = serveur :asyncronous socket error 10053 [Borland] - C++ - Programmation
Marsh Posté le 05-12-2003 à 20:36:51
jeoff a écrit : |
Balancer tout ton code comme ça ne servira pas à grand chose je pense.
Winsock error 10053 = Software Caused Connection Abort -- A connection was aborted by software on the host computer.
Ça vient peut-être de la manière dont tu te déconnectes... Sinon y a tj moyen de gérer proprement les erreurs hein
Marsh Posté le 05-12-2003 à 20:41:00
ouais je suis d'accord sur ce que tu dit mais disons que ca marchait très bien jusq' il y a 15 min et d'un coup plus moyen de déco sans planter le serv alors si t'as une astuce pour un débug genre tracer le soft dans le cpp je prens car en c je sais faire mais en c++ je dépasse pas les fenetre avec les try,catch ou celle du code asm si tu voit de quoi je veux parler
Marsh Posté le 05-12-2003 à 20:44:29
jeoff a écrit : mais en c++ je dépasse pas les fenetre avec les try,catch ou celle du code asm si tu voit de quoi je veux parler |
Non, je ne vois pas trop de quoi tu parles. La ponctuation c'est pas mal pour rendre les phrases plus compréhensibles .
Il me semble que pour éviter l'affichage automatique des messages d'erreur il faut dans le OnError mettre le code d'erreur à 0 ou quelque chose comme ça. Ils en parlent sûrement dans la doc (à moins que je confonde avec les composants Indy ?).
Quand tu dis que le serveur "plante", il plante comment ?
Marsh Posté le 05-12-2003 à 20:51:36
bon alors en fait lhistoire du debug, c'est que j'ai trois gros fichier dont :
serveur.cpp
Code :
|
et
server1.cpp
Code :
|
je ne sais pas comment tracer le programme en dehors de server.cpp afin de tracer le programme dans server1.cpp.
je ne sais meme pas si c'est possible d'ailleurs.
concernant la deuxième question sur l'erreur exacte j'y retourne pour récolter un max de détails
Marsh Posté le 05-12-2003 à 20:53:55
bah soit tu mets un breakpoint quelque part pour qu'il s'arrête, puis tu fais du pas à pas avec F7/F8 (F7 pour rentrer dans les fonctions, F8 pour juste exécuter les fonctions)
Soit tu mets le curseur quelque part dans le code et tu fais "run to cursor" (je ne me souviens jamais de quelle touche c'est, c'est dans le menu Run) et tu attends qu'il arrive à la ligne où est le curseur.
Marsh Posté le 05-12-2003 à 21:18:17
ok merci
sinon pour les erreurs que j'ai ben voila une descritpion de toutes les combinaisons que j'ai trouvé:
je lance le serv depuis borland et je connec puis déco le client:
Debugger Exception Notification : Project Server.exe raised exception class ESocketError with message 'Asynchronous socket error 10053". Process stopped.Use Step or Run to continue et j'arrive sur la fenetre de server.cpp avec la ligne bleue sur l'accolade :
Application->Run();
} <--ici
si je demarre le server sous win directement avec l'exec et que mon client se connec puis deco, j'obtient la meme erreur mais je peut continuer et la 2 cas se présentent:
soit j'arrête puis redemarre le server (via un bouton marche/arret sur la Form1) et lorsque un client se connecte jobtient l'erreur "List index out of bounds (1)"
soit je n'arete pas le server et reco directement le client
jobtient l'erreur
"Windows socket error: une connexion existante a du etre fermée par lhote distant (10054), on API'send'"
voila voila
v essayer ta methode pour tracer
je reviens (avec une bonne nouvelle j'espère)
Marsh Posté le 05-12-2003 à 21:21:03
Pour l'erreur ESocketError, c'est normal qu'il n'affiche pas d'où elle vient, c'est parce que ce n'est pas dans ton code mais dans le code des composants socket, à traiter avec les OnError etc. donc.
Idem pour l'autre erreur Winsock.
Le list index out of bouds, c'est probablement dans ton code, tu dois accéder à un index 1 (2è élément donc) d'une liste alors qu'elle en compte 0 ou 1.
Marsh Posté le 05-12-2003 à 21:36:46
bon g trouvé d'ou ca vient en fait dans mon evenement
Code :
|
j'ai cette ligne la qui fait planter lors de la déco ce qui est pour le moins bizarre car c'est un evénement sur l'acceptation de la connexion
Code :
|
v essayer de creuser ca (je suis sur le net avec 98 et xp avec borland alors c un peu chiant )
Marsh Posté le 05-12-2003 à 22:23:23
bon en fait g résolu le problème ca plante plus mais j'aimerai avoir votre avis sur la question suivante.
en fait comme le code est en travaux, je n'avait rien mis au niveau de
Code :
|
du coup quand on arrive a
Code :
|
si le client se déconnecte et bien comme il reste des données dans la socket coté serveur, la déconnexion foire et mon serveur plante.
J'ai bon ??? Parce que voila, résoudre un problème c bien joli mais si on a pas d'explication de l'origine exacte du problème, on se replante plus tard devant un cas similaire et ca spa bien.
EDIT merci a antp pour son aide et le temps qu'il m'a accordé, maintenant je sait tracer un cpp
Marsh Posté le 06-12-2003 à 22:12:33
N'utilise pas ServerSocket1Accept pour envoyer ta structure message à la connexion d'un client mais plutot OnClientConnect qui se declanche des qu'un client se connect c'est mieux.
Ensuite dans ton client il faut que tu code l'evenement OnClose de la form et que tu mettes ClientSocket1->Socket->Close()
Dans ce cas l'evenement OnDisconnect va se declancher dans le server et va tous remettre à jour. Par contre si dans le meme instant ton server envoyais quelque chose à ton client effectivement ca plante. Pour eviter se genre de chose, moi j'ai fais un Thread qui s'occupe d'envoyer les données du server vers les clients comme ca le server ne fais que recuperer et il est toujours pres à intervenir quand un client se deco.
Marsh Posté le 05-12-2003 à 20:32:04
bon ,depuis deux jours que je suis a fond sur mon projet et j'ai encore une merde mais celle la je sais pas d'ou elle vient du tout.
l'appli est un chat comportant 2 exec : client et serveur
c'est en travaux donc y aura ptet des commentaires qui servent a rien ou des lignes de debug ou du code en commentaire, c le bordel quoi.
mon problème survient lorsque le client se deconnecte, j'ai le serveur qui plante et borland m'affiche "asyncronous socket error 10053".
alors si vous pouvez m'aider hésirez pas Merci
(Code trop volumineux, on va faire autrement que de l'afficher)
Message édité par jeoff le 05-12-2003 à 20:47:04