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

Réseau C Discussion :

Vider buffer socket


Sujet :

Réseau C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut Vider buffer socket
    Bonjour,

    Y a t-il moyen de vider les buffer d'une socket suite à un envoi.

    En fait j'ai un code du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //coté client
    recv(sock, &buf, sizex, 0);
    recv(sock, &buf, sizey, 0);
     
    //coté serveur
    send(sock, &buf, sizea, 0);
    send(sock, &buf, sizeb, 0);
    Je voudrais que chaque envoi send corresponde à une réception recv, mais il arrive que deux envoi successifs donnent lieu à une seule réception, et du coup la 2ème réception peux bloquer ou ne pas correspondre à ce qui était attendu. Y a t-il un moyen de régler cela ?

    Merci

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    soit tu te met en mode non bloquant. ainsi tes appels a recv retournerons une valeur particuliere s'il n'y as rien a lire plutot que de bloquer
    soit tu utilise select pour savoir s'il y'as quelque chose a lire.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    slt,

    le problème en fait n'est pas tellement de bloquer, mais plutôt sur la correspondance 1-send<->1-recv

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sympho
    slt,

    le problème en fait n'est pas tellement de bloquer, mais plutôt sur la correspondance 1-send<->1-recv
    C'est pas vraiment contrôlable, et je ne vois pas où est le problème.

    C'est à toi de définir un protocole minimum qui permet de reconstituer tes données à l'arrivée. Genre "Les données sont des lignes de texte terminées par un '\n'"

    Je pense que tu as plus un problème de conception. Explique ce que tu veux faire et le moyen utilisé pour le faire. On verra les détails de réalisation en temps voulu. Chaque chose en son temps.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    j'ai trouvé,

    pour modifier la bufferisation du noyau pour une socket, il suffit de modifier ses options SO_SNDBUF et SO_RCVBUF.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    J'ai un peu le meme probleme. Je travaille avec des robots qui doivent dialoguer avec mon serveur. Mais ils ne sont pas capable de distinguer si le message recu est compose de plusieur requettes. Ces requettes ont des tailles diferentes, et sont envoyées a de tres faibles intervales.
    Du coup windows prend plusieur requettes et n'envoie qu'un seul paquet. Ca me gene enormement....

    Je travaille sous visual studio framework 1.1 en c#

    Toutes propositions est bonne a prendre.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Il n'y a pas beaucoup de solutions. Si ton socket est TCP, alors tu travaille en mode 'flux'. Les échanges entre le client et le serveur ne doivent pas se percevoir comme 'paquet' mais comme un flux de données. Donc, plusieurs send pourront correspondre à un nombre différent de recv. En fait, c’est non seulement au niveau de la couche TCP du récepteur que tes paquets peuvent être découpés ou agglutinés mais aussi tout le long du réseau. TCP te garantie que tout ce que tu envoi sera reçu et dans le même ordre, mais c’est un mode flux et non un mode paquet.
    Si tu veux un mode paquet, deux solutions :
    -> utiliser un socket UDP. Mais tu perds les avantages du mode connecté en TCP (garantie de réception, ordre garantie...).
    -> Soit tu reste sur TCP mais il te faut alors définir un protocole d'échange. En général, des protocoles de types TLV ([Type][Longueur][Valeur]) sont souples et évolutifs.

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Pourtant en TCP a partir du framework 3.0 il existe une propriete NO_DELAY qui a pour but d'nvoyer un message directement, et de ne pas le stoquer 200 milliseconde (valeur par defaut windows). Cela deconnecte l'algo de Nagle, tout simplement.

    Je ne comprend pas trop pourquoi je ne pourai pas y arriver en 1.1
    Je te remerci de ta reponse, je vais regarder le TLV et voir ce que je peux en tirer pour mon appli.

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par xankow Voir le message
    Pourtant en TCP a partir du framework 3.0 il existe une propriete NO_DELAY qui a pour but d'nvoyer un message directement, et de ne pas le stoquer 200 milliseconde (valeur par defaut windows). Cela deconnecte l'algo de Nagle, tout simplement.

    Je ne comprend pas trop pourquoi je ne pourai pas y arriver en 1.1
    Je te remerci de ta reponse, je vais regarder le TLV et voir ce que je peux en tirer pour mon appli.
    C'est un forum C, rien à voir avec Windows et encore moins le .NET Framework 3.0.
    De plus, c'est très mal vu de squatter un topic!
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

Discussions similaires

  1. [AC-2010] Vider buffer clic souris
    Par RomainBou54 dans le forum VBA Access
    Réponses: 0
    Dernier message: 16/12/2013, 13h55
  2. Réponses: 5
    Dernier message: 22/12/2010, 23h58
  3. Régler taille Buffer Socket
    Par Jazys dans le forum Flex
    Réponses: 3
    Dernier message: 23/04/2010, 00h32
  4. [Socket] Buffer et TCP
    Par rgz dans le forum Web & réseau
    Réponses: 7
    Dernier message: 14/10/2003, 13h59
  5. Vider le buffer du clavier
    Par flavien tetart dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 12/07/2002, 08h35

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