Bonjours.
C'est encore moi, pour encore des questions sur les socketsIl 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)); } }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
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; } }
Merci
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(); } }
Partager