Bonjours.

C'est encore moi, pour encore des questions sur les sockets Il faut croire que la réseautique ce n'est pas mon fort.

Je me suis créé une classe MyTcpListener et MyTcpClient. Avec ces classes je me créer un serveur qui écoute et un client qui envoye des message en boucle.

Le problème est que le serveur ne capte qu'un seul message et ensuite il attend pour je ne sais pas quoi. De son côté, le client réussi à envoyer le message qu'une seule fois et ensuite, il ne trouve pas le serveur.

mes classes :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
    public class ClTcpListener
    {
        string m_ipEcoute;
        int m_port;
        TcpListener m_serveur;
        TcpClient m_client;
        NetworkStream m_stream;
 
        public ClTcpListener(string p_ipEcoute, int p_port)
        {
            m_ipEcoute = p_ipEcoute;
            m_port = p_port;
        }
 
        public bool Initialiser()
        {
            try
            {
                IPAddress localAddr = IPAddress.Parse(m_ipEcoute);
                m_serveur = new TcpListener(localAddr, m_port);
                m_serveur.Start();
 
                m_client = m_serveur.AcceptTcpClient();
                m_stream = m_client.GetStream();
            }
            catch (SocketException e)
            {
                return false;
            }
            return true;
        }
 
        public bool Terminer()
        {
            try
            {
                m_client.Close();
                m_serveur.Stop();
            }
            catch (Exception e)
            {
                return false;
            }
            return true;
        }
 
        public Byte[] Ecouter(int p_longueur)
        {
            Byte[] bytes = null;
 
            try
            {
                Initialiser();
 
                // Buffer for reading data
                bytes = new Byte[p_longueur];
 
                int i;
                if ((i = m_stream.Read(bytes, 0, bytes.Length)) == 0)
                    return null;
                Console.WriteLine("code - " + i.ToString());
            }
            catch (SocketException e)
            { }
 
            return bytes;
        }
 
        public static string TransformerEnString(Byte[] p_bytes)
        { 
            return (System.Text.Encoding.ASCII.GetString(p_bytes));
        }
    }
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    public class ClTcpClient
    {
        string m_host;
        int m_port;
        TcpClient m_client;
        NetworkStream m_stream;
 
        public ClTcpClient(string p_host, int p_port)
        {
            m_host = p_host;
            m_port = p_port;
        }
 
        public bool Initialiser()
        {
            try
            {
                m_client = new TcpClient(m_host, m_port);
 
                m_stream = m_client.GetStream();
            }
            catch (Exception e)
            {
                return false;
            }
            return true;
        }
 
        public bool Terminer()
        {
            try
            {
                m_client.Close();
            }
            catch (Exception e)
            {
                return false;
            }
            return true;
        }
 
        public bool EnvoyerTexte(string p_texte)
        {
            Byte[] message = System.Text.Encoding.ASCII.GetBytes(p_texte);
            return EnvoyerBytes(message);
        }
 
        public bool EnvoyerBytes(Byte[] p_bytes)
        {
            try
            {
                m_stream.Write(p_bytes, 0, p_bytes.Length);
 
                m_client.Close();
            }
            catch (Exception e)
            {
                return false;
            }
            return true;
        }
    }
mon programme :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    class Program
    {
        Bitmap m_derniereImage = null;
 
        static void Listener()
        {
            ClTcpListener listener = new ClTcpListener("192.168.123.149", 5656);
            if (!listener.Initialiser())
                Console.WriteLine("Erreur lors de l'initialisation");
            else
            {
                Byte[] message;
                while (true)
                {
                    message = listener.Ecouter(32);
                    if (message != null)
                        Console.WriteLine("Reçu : " + ClTcpListener.TransformerEnString(message));
                }
 
            }
            listener.Terminer();
        }
 
        static void Client()
        {
            ClTcpClient client = new ClTcpClient("(monnomdedomaine).com", 5656);
            client.Initialiser();
            while (true)
            {
                Console.Write(System.DateTime.Now.ToString());
                if (client.EnvoyerTexte("salut"))
                    Console.Write(" - ok\n");
                else
                    Console.Write(" - erreur\n");
                Thread.Sleep(200);
            }
            client.Terminer();
        }
 
        static void Main(string[] args)
        {
            // Je met en commentaire un ou l'autre pour lancer soit le serveur, soit le client
            Listener();
            //Client();       
 
            // Pause avant la fermeture du programme
            Console.Read();
        }
    }
Merci