Bonjour,
voila 2 jours que j'essaye de programmer un petit chat juste avec les consoles en C# en utilisant les sockets.
J'ai plusieurs clients et un serveur, le tout sur un même PC en local.
Voila tout mes problèmes:
- J'arrive à envoyer un message avec le client mais un seul à la fois, c'est-à-dire que, si j'allume deux clients une fois le message envoyé par le premier il coupe la connexion avec et s'occupe du deuxième. Comme une file d'attente. Sa marche aussi avec 5 clients etc...
- Je suis obligé de donner une taille à ma variable byte, du coup j'ai des gros espaces entre chaque message ou bien même le contraire puisque je l'ai limiter a 100 pour cette exemple. J'aimerais juste adapter la taille.
SERVEUR.CS
CLIENT.CS
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 using System; using System.Net; using System.Net.Sockets; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { #region parametreSocket IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8888); Console.WriteLine("[Console] Le serveur a démarrer"); Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(localEndPoint); listener.Listen(10); #endregion parametreSocket byte[] bytes = new byte[100]; while (true) { Socket handler = listener.Accept(); try { Console.WriteLine(handler.RemoteEndPoint + " Vient de se connecter."); } catch (SocketException e) { Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode); } try { handler.Receive(bytes); Console.WriteLine(handler.RemoteEndPoint + " : " + Encoding.UTF8.GetString(bytes)); } catch (SocketException e) { Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode); } } } } }
Voilà les codes sources pour que vous puissiez tester si vous voulez.
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 using System; using System.Net; using System.Net.Sockets; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { #region parametreSocket IPEndPoint ip = new IPEndPoint(IPAddress.Parse("192.168.1.12"), 8888); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); #endregion parametreSocket // Pour le moment il n'y a pas de connexion int Cbon = 0; // Tant que c'est vrai while (true) { // Si on est connecter if (Cbon == 1) { // On essaye d'envoier un message try { string msg = Console.ReadLine(); // On converti le message a envoier en Byte byte[] msgByte = Encoding.UTF8.GetBytes(msg); int i = server.Send(msgByte); Console.WriteLine("Sent {0} bytes.", i); } catch (SocketException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode); Console.ResetColor(); } } else// Si pas de connexion { // On essaye de se connecter au serveur try { server.Connect(ip); Console.WriteLine("Connexion au serveur réussi"); Cbon = 1; } catch (SocketException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("{0}\nError code: {1}.", e.Message, e.ErrorCode); Console.ResetColor(); Cbon = 0; } } } } } }
Merci d'avance.
Partager