begin process at 2010 02 09 20:11:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Réseau & Internet

 > 

Client - Serveur

 > 

Tcpclient - taille des paquets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Tcpclient - taille des paquets

mardi 4 décembre 2007 à 12:12:43 | Tcpclient - taille des paquets

marcus_lambert

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.
mardi 4 décembre 2007 à 12:55:33 | Re : Tcpclient - taille des paquets

Scooper

Réponse acceptée !

Bonjour,

Le mieux pour ton problème, je pense, serait d'ajouter un tag de fin du coté du client à chaque fois que tu envoi et sur le serveur que tu boucle en lecture et que tu ajoute ce que tu recoit à un buffer tant que tu n'a pas le message de fin :
Exemple en c++ d'un de mes codes existants :

//Receive data until a transmissionend tag
  do
  {
   sock.SetTimeOut(5000);
   iReaden = inetSocket.Receive(&pBuffer[iReceived],MAX_INPUT_BUFFER_LENGTH);
   sock.KillTimeOut();
   if(iReaden <= 0)
   {
    LOGFUNC("MakeInetOperations",LOG_DEBUG,"[%X] No data readen break the loop",AfxGetThread()->m_nThreadID,iReceived);
    break;
   }
   iReceived += iReaden;
  }while(CString(pBuffer).Find("#TRANSMISSIONEND#") == -1);

avec cette methode tu es sur de lire ce que le client envoi et tu coupe tes paquets comme tu veux.

mardi 4 décembre 2007 à 17:58:32 | Re : Tcpclient - taille des paquets

marcus_lambert

Oui j'avais pensé à cette solution ainsi qu'à faire du bourrage dans mes trames.
Cette deuxième option est même plus simple à réaliser.

Comme  à priori il n'existe pas de méthode toute faite, je vais tester les deux.

Merci pour ton aide.


Cette discussion est classée dans : client, envoyer, char, tcpclient, cbuffer


Répondre à ce message

Sujets en rapport avec ce message

envoyer un message du serveur vers un client [ par houcem001 ] Salut j'ai un serveur et des clients qui connectent en utilisant le protocole TCP. Voici au dessous du partie du code concernant la connexion du serve TCPClient et TCPListener [ par Neokript ] Bonsoir a tous, j'ai code un client serveur qui pour le moment permet d'envoyer des messages. J'ai trouve comment envoyer des fichiers. (Même méthode static parametre [ par sheorogath ] j'ai encore un petit probleme de thread a cause d'uyne methode static que je ne peu pas mettre normale et d'un parametre je vous montre la source :/** asresse IP d'un client [ par houcem001 ] Salut j'ai un serveur qui ecoute s'il y a des clients. dés q'un client connecte on lui associe la variable tcpclient mon probléme est de determiner l problème tcp/client [ par Fildomen ] salutje connecte un client grâce au tcpclient private TcpClient [] Clients=new TcpClient[100];alors que mon serveur peux servir beaucoup de client, [c#]Envoie de mail [ par cedkat ] Bonjour, Je souhaite dans mon program envoyer un mail. Comment envoyer un mail au client de messagerie du poste client. C'est-a-dire que si le client Envois d'une liste à plusieurs clients [ par Captain_Bomber ] Bonjour à tous!!J'ai pratiquement terminé mon chat Client/Serveur TCP, et il reste une fonction qui pose problème...J'utilise une ListBox qui affiche Envoyer le contenu d'un edit [ par underdog08 ] Bonjour,J'ai besoin de realiser un serveur client udp et c'est la premiere foi que je programme  en c#!J'arrive à transmettre des données lors de la c TCPClient [ par thebigboss ] Bonjour,Je n'ai pas trouvé l'info dans MSDN:Est-ce qu'une exception est générée lorsque l'on appelle la methode Connect() d'un TCPClient et qu'aucun S Definir soit meme les index d'un DropDownList [ par hasen ] Bonjour à tous!Dans mon application, j'utilise un DropDownList pour afficher la liste des clients de ma base. Donc pour la remplir, j'accede à ma base


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales