Envoi de plusieurs trames

aposfa Messages postés 36 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 14 mars 2009 - 13 mars 2008 à 16:35
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 16 mars 2008 à 23:25
    Bonjour

Après quelques recherches qui n'ont pas abouties à ceux que je voulais, je vais donc poser ma question ici :

Je dois envoyer a une liste de clients 4 trames séparement, sauf qu'il ne m'en envoie qu'une, il concatene les 4 ensembles.

Voici un extrait de mon code :

myConnex.Message = "DEALER " + current_i.ToString();

                                DataBuffer = Encoding.UTF8.GetBytes(myConnex.Message);
                               
                                for (int i = 0; i < List_Joueurs.Count; i++) //on envoie aux joueurs qui continuent
                                    ((Socket)List_Joueurs[i]).Send(DataBuffer, DataBuffer.Length, SocketFlags.None); //on envoie le message à tout le monde                   

                                myConnex.Message = "SMALLBLEND " + (current_i + 1).ToString() + "|" + SMALLBLEND.ToString();

                                DataBuffer = Encoding.UTF8.GetBytes(myConnex.Message);

                                for (int i = 0; i < List_Joueurs.Count; i++) //on envoie aux joueurs qui continuent
                                    ((Socket)List_Joueurs[i]).Send(DataBuffer, DataBuffer.Length, SocketFlags.None); //on envoie le message à tout le monde

Voila donc au lieu de m'envoyer 2 trames, il m'en envoie une seule contenant les 2 messages concaténés. Apparemment il fait ca parce qu'il se dit que tant qu'il y a de la place dans le Buffer, je mets le message dedans et je ferai un seul envoi.
Alors comment empecher ca ?

Merci d'avance

10 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
14 mars 2008 à 17:53
salut,

et si tu Flush après chaque Send ?

ShareVB
0
aposfa Messages postés 36 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 14 mars 2009
14 mars 2008 à 20:00
La méthode Flush de quel objet ??
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
14 mars 2008 à 20:45
du socket

ShareVB
0
aposfa Messages postés 36 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 14 mars 2009
14 mars 2008 à 21:28
Je n'est pas de methode Flush pour le socket
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aposfa Messages postés 36 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 14 mars 2009
14 mars 2008 à 21:29
*Je n'ai (et non pas "n'est" dsl)
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
14 mars 2008 à 22:37
salut,

voici un lien qui parle de flush sur socket, en fait, il faut utiliser un NetworkStream sur base de socket et ensuite, tu peux utiliser un StreamWriter sur le NetworkStream pour écrire du texte...et puis du coup, tu as un flush : http://angrez.blogspot.com/2007/02/flush-socket-in-net-or-c.html

ShareVB
0
aposfa Messages postés 36 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 14 mars 2009
14 mars 2008 à 22:42
Ok merci beaucoup pour le lien. Je testerai çà dès demain
0
aposfa Messages postés 36 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 14 mars 2009
16 mars 2008 à 21:36
Après avoir regardé attentivement ton lien, je n'est toujours pas tres bien compris.

Donc une fois que jai déclaré ca :
NetworkStream stream = new NetworkStream(socket);
StreamReader sr = new StreamReader(stream);
StreamWriter sw = new StreamWriter(stream);

Je suppose que je fais sw.AutoFlush = true;

Mais apres j'ai vu qu'il y avait une methode Write(string value)
Donc il faut que je mette le message que je dois envoyer en parametre ? Exemple : sw.Write(myConnex.Message);

Et puis apres comme je fais pour envoyer mon message a ma liste de sockets ? (ici : List_Joueur)

Merci
0
aposfa Messages postés 36 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 14 mars 2009
16 mars 2008 à 22:43
J'ai reflechi un peu et je fais ca :

NetworkStream stream;

for (int i = 0; i < List_Joueurs.Count; i++)
{
        stream = new NetworkStream(((Socket)List_Joueurs[i]));
        DataBuffer = Encoding.UTF8.GetBytes(flop);                                
        stream.BeginWrite(DataBuffer, 0, DataBuffer.Length, new AsyncCallback(myWriteCallBack), stream);
}

avec

protected static void myWriteCallBack(IAsyncResult ar)
{
            NetworkStream myNetworkStream = (NetworkStream)ar.AsyncState;
            myNetworkStream.EndWrite(ar);
            myNetworkStream.Flush();
}

Mais le probleme est toujours le meme, il me groupe mes message et n'envoie qu'une seule fois.

Est ce que ma methode flsuh est mal placée ?
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
16 mars 2008 à 23:25
salut,

euh, en fait, le flush marche surement bien mais le prb c'est surtout que à la réception tu dois surement lire tout d'un coup par buffer...le mieux serait de séparer chaque "commande" par un "\r\n" (WriteLine) et de lire sur un StreamReader (readline) qui lit un NetworkStream...et d'ailleurs en fait dans ce cas, le flush n'est plus vraiment nécessaire...

ShareVB
0
Rejoignez-nous