aposfa
Messages postés36Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention14 mars 2009
-
13 mars 2008 à 16:35
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 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.
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
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 ?
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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
aposfa
Messages postés36Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention14 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)
aposfa
Messages postés36Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention14 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);
}
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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...