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

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);
                }
            }
 
        }
    }
}
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
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;
                    }
                }
            }
 
        }
    }
}
Voilà les codes sources pour que vous puissiez tester si vous voulez.

Merci d'avance.