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!

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)
                {
 
                }
            }
        }
Cette méthode écoute en continue la socket pour recevoir les messages.

Mon problème est que fonctionnellement quand l'utilisateur ferme sa fenêtre de conversation, je ferme la socket --> Socket.close().

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();
        }
Donc voilà j'arrête le thread d'écoute et je ferme la socket commune aux deux mecs qui se parlent.

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!!