IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Taille Paquet d'un socket


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut Taille Paquet d'un socket
    Bonjour

    J'ai un souci de réception lors de gros paquet.

    Typiquement, j'ai une première application client serveur qui accepte les connexion d'un client et lui envoi une socket, par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	Wsocket->Send(wrBuf,wrBuf.GetLength(),0);
    La taille du CString peut etre de 4096 bytes envoyé en une fois.

    DE l'autre coté mon client est dans un activeX et recoit en synchrone cette socket par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    TCHAR  rdBuf[32768];
    	int nRcvBufSize = 32768;
    	int nint = sizeof(int);
    	int nbRead = 0;
     
     
    		CSocket *Clientsocket=new CSocket;
    		if (Clientsocket->Create())
    		{
     
    			if (Clientsocket->Connect(AddressIP,Port) )
    			{
    				Clientsocket->GetSockNameEx(myName,myPort);
    				Clientsocket->SetSockOpt(SO_RCVBUF,&nRcvBufSize,nint,SOL_SOCKET);
     
    				Order.Format(_T("%s:GETI"),myName);
    				Clientsocket->Send(Order,Order.GetLength());
    				nbRead = Clientsocket->Receive(rdBuf,32768);
    Avec une taille de buffer a 32768.

    Lorsque je met mon activeX sur un windows vista je recoit ma trame complete.
    En mettant l'activeX sur un XP, la trame ne m'arrive pas complete.

    Je pensais que les sockets etait un process qui en cas de paquet trop grand (plus grand que le MTU) les decoupait et les reassemblait et que se soit transparent pour l'utilisateur Est ce vrai?

    Je souhaite restait en Socket synchrone comment envoyé et recevoir des paquet de grosse taille (environ 10ko) sans perdre des données en cours?

    Cordialement

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Visiblement, tu envoie du texte sur ton socket. Mais à l'autre bout, comment le récepteur sait il qu'il a tout lu.

    Il faut que le récepteur ait une indication de fin. Pour cela, 2 solutions possible,
    • soit envoyer en 1er la longeur des données envoyées
    • soit envoyer en fin de données un caractère qui veut dire fin de données. Le caractère \n est souvent utilisé dans les protocoles texte.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Merci pour ta réponse

    En effectivement contrôlant un caractère de fin je récupère l'ensemble de mes données.

    Mon erreur était de penser que tout ce qui était demandé en envoi lors du send, était envoyé ou retournait une erreur.
    En faite le Send découpe le données et n'envoie pas forcement tout le buffer, et ne retourne pas d'erreur selon le decoupage, juste le nb de char envoyé.

    Je pensait que le socket lors du decoupage s'occupait de tout ( un send et un receive et que le decoupage etait encapsuler dans les 2 functions)
    J'ai maintenant compris que c'est au développeur de s'occuper de savoir que tout est envoyé et que tout est bien reçu

    Cordialement
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Le socket ne lit pas la taille du paquet
    Par midoriiro dans le forum Réseau
    Réponses: 0
    Dernier message: 09/03/2013, 14h51
  2. [Socket][Byte] Probleme d'envoi d'une taille de fichier
    Par Erok dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 12/05/2009, 17h38
  3. Problème de taille buffer et de socket
    Par Link3 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/08/2008, 11h28
  4. Reconstruction paquets recus par socket?
    Par sacoum dans le forum Réseau
    Réponses: 5
    Dernier message: 09/07/2008, 02h04
  5. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum Développement
    Réponses: 6
    Dernier message: 02/01/2003, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo