Bonjour,

Je suis actuellement entrain de réaliser un serveur en C# et j'utilise donc des Sockets.

Dans mon programme, j'ai créé un Thread chargé de recevoir les données.

Ce thread récupère les données envoyées par chaque client et traite le message.

Son code :
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
foreach (Socket client in m_Clients.Values)
{
    // Si on a reçu des données
    if (client.Available > 0)
    {
        byte [] buffer = new byte [client.Available];
 
        // Réception des données
        client.Receive(buffer, buffer.Length, SocketFlags.None);
 
        // Transformation bytes -> string
        string message = new System.Text.ASCIIEncoding().GetString(buffer);
 
        // Traitement
        Traitement(message);
    }
}
Mon problème est le suivant :

Imaginons que tous les clients envoient toutes les secondes le message "bonjour".

Si un traitement (fonction Traitement()) prend plus de 3 secondes pour un client, quand je vais faire le Receive pour le prochain client, je vais alors avoir le message "bonjourbonjourbonjour".

Il y a t-il un moyen d'éviter cela, et par exemple imaginer un Receive qui indique que le client a envoyé 3 messages : "bonjour" "bonjour" et "bonjour" ?

Merci !
Flo