C# vider le buffer

Signaler
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008
-
Messages postés
3
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
27 mai 2009
-
Bonjour,

je suis actuellement en train de faire un serveur qui envoie des messages tres courts et tres raprochés (dans le temps).
Le probleme c'est que windows met mes messages dans un buffer et n'envoie qu'une seule trame comprenant tous mes messages. Mes clients sont des robots, ils sont incapables de redecouper la trame. Ils executent le premier message puis vident leurs buffers. Donc mes autres messages sont perdus.
C'est l'algo de Nagle qui veut ca. Normalement ca peut etre evité en utilisant la commende NO_DELAY. Mais je travaille sous visual studio avec le framework 1.1 et avec des sokets en TCP.

J'ai vraiment besoin qu'une trame == un message.

Merci de votre aide.

5 réponses

Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

Attention, je n'y connais pas grand chose, je vais ptet proposer un truc idiot, mais est-ce que ca serait pas possible pour toi de femer la connexion après chaque trame pour l'obliger a realiser son envoi, puis la rouvrir avant la trame suivante ? Meme si je pense que tu perdrais en rapidité.

~~
Les trois lois de Codes-Sources :
Loi 1) Tu lis et respectes le reglement
Loi 2) Tu penses à valider si une reponse apportée à ton problème t'a aidé
Loi 3) Si tu ne respectes pas les 2 premières ....TU SORS !!
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008

Salut,
ta solution a ete etudiée, et elle me fait perdre un peu de temps c'est vrai. Mais le principal probleme vient du fait que j'ai plusieurs clients. Ca devient tres difficile d'ecrire a un client en particulier et de l'identifier si son socket change a chaque message.
Je prefererai pouvoir deconnecter l'algo de Nagle.

Merci de ton aide et de ton temps.
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
61
Hello,

Ca fait un moment que je n'ai plus travaillé avec des sockets, mais n'y a-t-il pas ne méthode Flush permettant de vider le buffer ?

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008

Je crois pas que flush marche avec des Socket, c'est reservé au Stream.
non?
Si c'est pas le cas, je sais pas comment l'utiliser.
Messages postés
3
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
27 mai 2009

salut je pense ke flush marche avec les socket (en c) essaye flush(id_de_ta_socket) ,c'est fflush qui ne marche pas avec les sokets.m