Salut, je développe actuellement un petit logiciel de messagerie instantanée, j'arrive à peu près bien gérer le client. Mais un problème subsiste et j'aurai besoin de vos lumières.
voici un extrait de ma classe Fenetre permettant d'envoyer des messages et incorporant un thread d'écoute!
Cette méthode écoute en continue la socket pour recevoir les messages.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public void ecoute(Object sock) { while (true) { try { byte[] bytes = new byte[256]; ((Socket)sock).Receive(bytes); MessageBox.Show(Encoding.UTF8.GetString(bytes) + "\n"); } catch (SocketException s) { } } }
Mon problème est que fonctionnellement quand l'utilisateur ferme sa fenêtre de conversation, je ferme la socket --> Socket.close().
Donc voilà j'arrête le thread d'écoute et je ferme la socket commune aux deux mecs qui se parlent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private void Fenetre_FormClosed(object sender, FormClosedEventArgs e) { threadListen.Abort(); SockConnection.Close(); }
Et, là, il se produit quelque chose de bizarre, le thread d'écoute de l'interlocuteur qui a encore sa fenêtre de conversation ouverte, reçoit des messages sans rien dedans, en convertissant en string, j'ai vu qu'il n'y a que des caractères vides ( \0), donc comment se fait-il qu'en fermant la socket commune, cela envoie des messages vide à son interlocuteur???
Je sais pas si je me fais bien comprendre mais c'est réellement ce qui se passe!!
Partager