Bonjour,
Je cherche à faire une application client / serveur en utilisant tcpclient et tcplistener.
J'ai trouvé pas mal de sources sur le net, seulement j'ai un problème de conception.
Le client doit envoyer des chaines de carcatères le plus vite possible au serveur, puis ce dernier les passe à une autre application.
Je ne ferme donc jamais le flux entre les deux applications afin de gagner du temps.
Pour le moment les données sont ensuite envoyées par le client de cette manière:
private void SendCommand(string _strConnect)
{
char[] cbuffer = new char[1024];
NetworkStream ns = m_tcpClient.GetStream();
StreamWriter sw = new StreamWriter(ns);
sw.AutoFlush = true;
sw.Write(_strConnect);
}
Côté serveur la reception:
char[] cbuffer = new char[1024];
NetworkStream ns = newclient.GetStream();
StreamReader sr = new StreamReader(ns);
int count = sr.Read(cbuffer, 0, 1024);
if (count == 0)
{
Console.Out.WriteLine("client déconnecté");
}
else
{
Console.Out.WriteLine(new string(cbuffer, 0, count));
//envoie de la chaine vers l'autre application
}
Mon problème c'est qu'au bout d'un moment les chaines se mélangent. J'ai la fin de l'une avec le debut d'une autre ...
J'en suis arrivé à me dire que la méthode que j'utilise n'était peut être pas la bonne.
A la place du buffer j'ai tenté d'utiliser WriteLine et ReadLine mais j'ai eut à peu près le même problème.
J'ai ensuite essayé de d'envoyer la taille de ma chaine avant d'envoyer la chaine afin de lire à chaque fois le bon nombre d'octets sur le flux, mais je ne recevais pas toutes les commandes.
Pourriez vous me conseiller sur la méthode la plus adaptée pour envoyer des chaines de caractères le plus vite possible et surtout être sur de les lires intégralement?
Merci.