Mon socket reçoit des données, répond, puis après... chais pas... - C#/.NET managed - Programmation
Marsh Posté le 28-12-2005 à 16:42:13
Voilà, si qq1 pouvait me dire ce qu'il se passe et m'indiquer comme résoudre ces problème, ce serait super sympa
Marsh Posté le 28-12-2005 à 16:43:59
Ah, aussi, je veux bien qu'on m'explique pourquoi la ligne "Tiens, j'ai planté" Parceque je ne pense pas que ce soit normal que cette exception se lance alors que j'ai rien fait de mal...
Marsh Posté le 28-12-2005 à 17:39:13
Ca passionne les foules, c'est fou.
Pour reprendre le problème du telnet (le principal problème en fait) : lorsque j'ai terminé de recevoir les données, le code laisse la connection ouverte, mais il n'affiche plus.
On le voit d'ailleurs, puisqu'à ce moment telnet se contente d'afficher les infos qu'on tape, alors que lorsque le serveur écoute, il n'affiche rien, puisque tout est aussitôt consommé par le serveur.
Par contre, la connection reste ouverte, sinon telnet afficherait un message comme quoi il est déconnecté, et ce n'est pas le cas.
Marsh Posté le 28-12-2005 à 17:40:49
Exemple : telnet www.google.com 80
On tapes 2 fois <entrée>
On retourne à l'invite car le site web a fermé la connection, voyant qu'il n'avait rien à traîter.
Marsh Posté le 28-12-2005 à 17:43:13
Et ça, c'est si je tape :
|
Retour :
Code :
|
Telnet reste ouvert histoire de montrer le résultat, mais il indique bien que la connection est perdue.
Marsh Posté le 29-12-2005 à 10:52:55
Ca inspire toujours les foules, c'est fou
J'ai fait quelques modifs au niveau des logs, et j'ai plus d'infos sur ce qu'il se passe.
Apparement :
- Après émission de données, mon socket part bel et bien en live : pour le service, il est toujours en train d'écouter, alors que ce n'est pas le cas
- Lorsque je cherche à détruire mon socket, j'ai un problème de parcours de la collection dans laquelle il est stocké, et c'est ça qui fait l'erreur durant le nettoyage
- Lorsque j'arrête le service, on socket qui n'est plu censé être actif reprends la main puis s'arrêté.
Log :
|
Fonctions incriminée :
Code :
|
D'après le log, c'est la dernière fonction qui était restée blockée (certainement sur le allDone.Set()) et qui se débloque lors de l'arrêt du service.
Marsh Posté le 29-12-2005 à 11:07:10
Bon, j'ai résolu le premier problème : l'exception qui empêche la destruction de tous les sockets inactifs.
Code :
|
Par contre, pour le reste, je ne comprends pas...
Marsh Posté le 29-12-2005 à 11:13:56
Et j'aimerais bien que mon socket continue à écouter après émission d'une info... Ou se détruire à la limite, mais faire un truc quoi...
Parceque là, je vais rapidement arriver à saturation si j'ai 1 socket mort par échange, vu que je ne flush les socket qu'au bout des 5 minutes de timeout...
Marsh Posté le 29-12-2005 à 12:13:09
Là, je reste sur mon derrière... Je suis quand même pas le seul à vouloir faire un serveur Socks asynchrone...
Marsh Posté le 09-01-2006 à 11:29:45
Question : c'est quoi la différence entre ton code et ça :
http://msdn.microsoft.com/library/ [...] socket.asp
Ou bien : c'est quoi qui va pas ou que tu capte pas, par rapport à la solution MS ?
Désolé, j'ai pas le temps de lire tout ton post, mais comme j'ai déjà joué avec des sockets je peux ptet te filer un coup de pouce.
Marsh Posté le 28-12-2005 à 16:41:35
Salut,
Vu que j'ai rien à foutre au taff, j'essaie de faire de la veille techno histoire de me constituer des librairies de softs à utiliser...
J'ai décidé de tenter de me faire une DLL qui me permette d'accéder à des fichiers sur un serveur distant, sans utiliser le protocole NETBIOS ni FTP. Le but, c'est de pouvoir travailler sur n'importe quel port, et utiliser un format d'échange basé sur du XML passant par HTTP 1.1 (et peut-être d'autres protocoles si besoin).
Pour le moment, je suis en train d'écrire le début du service serveur, c'est à dire la partie qui va tourner sur le PC qui doit partager ses fichiers.
Je suis loin d'avoir commencé le début du commencement ma bon...
J'ai trouvé sur un site comment écrire une appli serveur utilisant des connections asychrones. Je pense que c'est ce que je peux faire de mieu pour ce qui est des performances, non ?
Ensuite, je suis allé sur la MSDN et j'ai transformé le schmilblik en service.
Bon, ça marche, c'est super.
Sauf que j'ai un problème et une question :
- Lorsque je me connecte en telnet sur le service, je tape quelques trucs plus la suite de caractère idiquant la fin d'échange. Jusque là, pas de problème.
- Le service me répond alors ce qu'il est censé me répondre, c'est à dire "yo" suivi de la chaîne "^^" indiquant la fin d'un échange.
Sauf que là, la connection du côté serveur n'écoute plus, et telnet ne s'en rend apparement pas compte : je peux taper n'importe quoi dans ma fenêtre et ça fait plus jamais rien. D'où vient le problème ?
Ensuite, lorsque j'ai demandé l'arrêt du service, j'ai pas tout compris à ce qui s'est passé d'après le log...
En effet, le truc s'arrête, puis se remet à écouter, et reçoit même une demande de connection... avant de s'arrêter comme un bourrin !
Bref, c'est pas gagné
Ci-dessous le projet (enfin, les), ainsi que le log correspondant au test que j'ai effectué.
Les sources et les EXE testés :
http://www.bci-logs.fr/magictalk.zip
Le test :
net start magictalkserver
telnet localhost 1000
prout^^
(kill de la fenêtre cause telnet parti en live après réception de "yo^^" )
net stop magictalkserver
Le log (pour ceux que ça intéresse, le projet "logFile" est standalone et bien pratique ) :
################################################################################
MagicTalkServer is starting on 28/12/2005 16:06:27
Service MagicTalk Server version 1.0 debug
Legend :
PP : Application parameter (see INI file)
II : Informal message
EE : Blocking error
ee : Non-blocking error
WW : Warning message
################################################################################
28/12/2005 II : Démarrage du service
28/12/2005 II : Début de l'écoute sur le port 1000
28/12/2005 II : Apparement, on vient de se connecter à moi
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : J'ai pas encore tout reçu, j'attends encore
28/12/2005 II : J'ai de la lecture
28/12/2005 II : Je crois que j'ai reçu tout ce qu'il y avait à recevoir
28/12/2005 II : J'envoie de la lecture
28/12/2005 II : J'émet des données
28/12/2005 II : Nettoyage des sockets
28/12/2005 II : Socket mort détecté : on le vire
28/12/2005 II : Destruction d'un socket
28/12/2005 II : Tiens, j'ai planté
28/12/2005 II : Fin du nettoyage des sockets
28/12/2005 II : Nettoyage des sockets
28/12/2005 II : Fin du nettoyage des sockets
28/12/2005 II : Nettoyage des sockets
28/12/2005 II : Fin du nettoyage des sockets
28/12/2005 II : Arrêt du service
28/12/2005 II : Arrêt demandé, destruction de tous les sockets
28/12/2005 II : Apparement, on vient de se connecter à moi
28/12/2005 II : OK, normalement je dois pouvoir recevoir des connections
################################################################################
MagicTalkServer is ending...
Process summary :
Readen application parameters : 0
Informal messages 36
Blocking errors 0
Non-blocking errors 0
Warning messages 0
################################################################################
-- Edit : Correction de l'url du fichier ZIP car Lycos ne permet pas de télécharger un fichier
Message édité par Arjuna le 29-12-2005 à 11:10:41