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

C Discussion :

Socket effacer le Buffer


Sujet :

C

  1. #1
    Membre éclairé Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Par défaut Socket effacer le Buffer
    Bonjour,

    J'ai deux petites applications un client et un serveur, le client envoie un message au serveur et le serveur répond le client par autre un message pour lui dire par exemple qu'il a bien reçu.

    le soucis, j'ai essayé de le faire avec une seule Socket (c'est à dire avec la même socket le client envoie et reçoit un message) le problème que j'ai eu, c'est lorsque le client envoie un long message (donc il sera stocké dans le buffer de transmission) ensuite lorsque le serveur répond le client par un petit message, le client reçoit la réponse du serveur + une partie du message envoyé par le client (donc il n'efface pas le contenu du buffer)

    Je voudrais savoir comment faire pour effacer le buffer d'une socket avant retransmission ?
    merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 25
    Par défaut
    Salut,

    Il me semble que tu peux régler ce problème en lisant simplement toute les données stockées dans le tampon. Pour ce faire, tu peux utiliser une boucle de lecture et la fonction select (afin d'être certains qu'il y a des données à lire).

  3. #3
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    le client reçoit la réponse du serveur + une partie du message envoyé par le client (donc il n'efface pas le contenu du buffer)
    Du coup il faut récupérer la taille du message reçu. Et n'afficher que cette quantité de données.

    Je suppose que pour observer ce que tu nous décris, tu affiches l'intégralité du buffer ? Avec quoi ? Un fprintf ? Si c'est le cas, il faut mettre un 0 à la fin du message reçu.

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur Systèmes et Réseaux
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur Systèmes et Réseaux

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Par défaut
    Si tu utilise les TIdTCPServeur je peux te donner un coup de main. Mais bon encore une fois c'est du C++ sur fiche VCL.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    ...(donc il n'efface pas le contenu du buffer)
    Salut
    En C "effacer" ne veut rien dire. Une variable ne possède jamais "rien" !!!
    Je présume que tu envoies "intelligemment" tes messages. Donc que tu envoies seulement strlen(message) octets.
    Le pb c'est que si ton message est "toto" alors la zone mémoire contient 5 octets (faut pas oublier le '\0'). Mais ce '\0' n'a pas été envoyé...

    Donc comme les autres te l'ont dit. Comme ton client connait le nb d'octets envoyés il peut rajouter lui-même le '\0'.
    Ou alors simplifier et envoyer (strlen(message) + 1) octets. Le client recevra aussi le '\0'...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Socket: Tailles des buffers en émission et réception
    Par rulianf dans le forum Réseau
    Réponses: 0
    Dernier message: 17/02/2010, 16h01
  2. Socket : augmenter le buffer de sortie
    Par Gomoz dans le forum C#
    Réponses: 0
    Dernier message: 26/01/2010, 19h12
  3. Comment effacer le buffer dans TCOMPORT
    Par hitmman dans le forum C++Builder
    Réponses: 0
    Dernier message: 13/07/2008, 15h53
  4. Socket, C++ et buffer !
    Par agent007se dans le forum C++
    Réponses: 9
    Dernier message: 18/04/2006, 18h02
  5. [Socket] Buffer et TCP
    Par rgz dans le forum Web & réseau
    Réponses: 7
    Dernier message: 14/10/2003, 13h59

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