Passboss87
Messages postés11Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention27 février 2010
-
9 oct. 2007 à 00:36
Passboss87
Messages postés11Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention27 février 2010
-
12 oct. 2007 à 14:05
Bonjour, je suis débutant en visual studio 2005.
J'ai voulu créer un chat serveur/client et tout marche quasiment.
Et j'arrive enfin au moment où je dois tester si un client est toujours connecté, j'ai du lire des tonnes et des tonnes de pages sur internet.
Je réalise donc ceci ( oui il est simple lol je ne suis qu'un petit nouveau ) :
private void lect_mess()
{
Byte[] buffer = new Byte[1024];
String data = null;
Socket MySocket = (Socket)liste[liste.Count - 1];
while (Thread.CurrentThread.IsAlive)
{
if (MySocket.Connected)
{
if (MySocket.Poll(10, SelectMode.SelectRead) && MySocket.Available == 0)
{
Thread.CurrentThread.Abort();
}
else
{
MySocket.Receive(buffer);
data = null;
data = Encoding.ASCII.GetString(buffer);
listBox1.Items.Add("Client" + i + " : " + data);
}
}
}
}
Lorsque je déconnecte un client du serveur , mon serveur reçoit un dernier message et j'obtiens aussi un message d'erreur du style "débogage, envoyer le rapport d'erreurs ou ne pas envoyer" puis l'application se ferme.
Je lis ce rapport d'erreur qui est :
EventType : clr20r3 P1 : serveur.exe P2 : 1.0.2837.42190
P3 : 470b2d1c P4 : mscorlib P5 : 2.0.0.0 P6 : 461eee3d P7 : 154b
P8 : 21 P9 : system.argumentoutofrange
et je n'y comprends rien, pouvez vous m'aider s'il vous plait? Je pense que l'erreur vient du Thread.CurrentThread.Abort(); mais je n'arrive vraiment pas à résoudre ce problème, je n'en peux plus ! Merci d'avance pour les réponses.
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 10 oct. 2007 à 13:10
Mets ton code dans un bloc try/catch ou utilise le debugger pour regarder quelle exception est levée : cela te fournira la cause précise du problème (et donc sa solution ;)
<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Passboss87
Messages postés11Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention27 février 2010 10 oct. 2007 à 21:21
Si j'ai bien compris ce que tu as dit, j'ai mis un bloc try\catch comme suit :
private void lect_mess()
{
Byte[] buffer = new Byte[1024];
String data = null;
Socket MySocket = (Socket)liste[liste.Count - 1];
while (Thread.CurrentThread.IsAlive)
{
try
{
if (MySocket.Poll(10, SelectMode.SelectRead) && MySocket.Available == 0)
{
Thread.CurrentThread.Abort();
Thread.Sleep(0);
}
else
{
...
}
}
catch ( Exception e )
{
Console.WriteLine("{0} Exception caught.", e);
}
}
}
Quand je le compile je n'ai aucune erreur, mais maintenant que dois-je faire ? désolé je ne comprends pas encore tres bien ce langage malgré ce que j'ai pu lire.
bidou_01
Messages postés134Date d'inscriptiondimanche 1 octobre 2006StatutMembreDernière intervention19 mai 20081 11 oct. 2007 à 20:43
Bonsoir,
L'appel de la méthode Abort() sur le thread courant (CurrentThread) va tenter d'arrêter le thread courant, le Thread.Sleep(0); ne sert pas à grand chose derrière. Mais là, il est normal que ton application s'arrête car tu demandes l'arrêt du Thread Principal. Logiquement, au moment ou ta condition if (MySocket.Poll(10, SelectMode.SelectRead) && MySocket.Available == 0) est validée, tu dois avoir une ligne dans la console correspondant à cette instruction Console.WriteLine("{0} Exception caught.", e); et ton appli doit se fermer.
Cordialement,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Passboss87
Messages postés11Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention27 février 2010 12 oct. 2007 à 14:05
Merci pour la réponse,
.. il y a une question que je me pose, quelle est la différence entre exécuter l'exécutable dans le dossier bin\debug et l'exécuter a l'aide du debug dans le visual studio 2005? car quand j'exécute l'exécutable il fonctionne, mais bug au bout de plusieurs connexions/déconnexions du client tandis que quand j'utilise le debug, je n'arrive carrément pas a les connecter donc je ne peux pas voir la ligne dans la console comme tu me le dis.