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 2 envoi = 1 arrivée ?


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut Socket 2 envoi = 1 arrivée ?
    Bonjour,
    voila j'ai un petit soucis.. d'un coté G mon serveur, il envoi des info au client.
    et le problème est que lorsque j'envoi plusieurs fois des infos, parfois elles arrivent concatenée.

    exemple:

    server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sendReply(150,soc);
    sendReply(151,soc,itos(FileSize));
    sendReply(152,soc,itos(taillepacket));
    voila 3 envoi, le premiere arrive intacte au client. le 2eme et le 3eme arrive concaténé. Et je ne comprend pas pourquoi :/ le plus étrange est que lorsque j'ai le client et le serveur sur la meme machine, tout marche, mais des que le client est une autre machine.. plus rien de va..

    Quelqu'un a une explication ????? merci

  2. #2
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    voila j'ai un petit soucis.. d'un coté G mon serveur, il envoi des info au client.
    et le problème est que lorsque j'envoi plusieurs fois des infos, parfois elles arrivent concatenée.
    C'est normal, l'OS n'envoit pas les données directement.

    Il attend de voir s'il peut encore remplir le paquet en court.

    C'est à toi de régler ça, en utilisant un système de message par exemple.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu peux également recevoir un seul envoi en deux fois. Ainsi, tu peux envoyer des données en commençant par préciser leur taille...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    Citation Envoyé par Mayti4
    C'est normal, l'OS n'envoit pas les données directement.

    Il attend de voir s'il peut encore remplir le paquet en court.

    C'est à toi de régler ça, en utilisant un système de message par exemple.
    ==> il faudrait, pour bien faire que mon Client reponde a mon serveur a chaque fois qu'il recoit quelque chose ????

  5. #5
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Cela dépend de la taille du buffer à la réception, si tu mets par exemple 100 en taille de buffer à la réception, et que tu envoies 51 et ensuite 51, il déclenche la réception de donnée à la seconde réception. 2 astuces.
    Soit tu envoies la taille des données avant l’envoie des données.
    Soit tu lis le buffer octect par octect à la réception.

    [EDIT]
    La solution à Médinoc correspond à la solution 1, que je donne, désolé de répéter
    [/EDIT]

  6. #6
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    et donc, si par exemple je reduit la taille de mon buffre, ça pourrait arranger les choses ??? enfin je vais tester, merci pour votre aide

    je vous tiens au courant

  7. #7
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    voila, j'ai résolu mon problème. C'est dur, c'est peut etre pas la meilleur des facon.. mais bon..

    je fais en sorte que des que mon serveur envoi quelque chose, mon client repond. Ca marche bien comme ça.. mais maintenant je me demande si ça ralenti pas le tout ???

    depuis, j'ai eu le meme problème pour transfèrerdes fichier ==> mon algo

    server envoi un packet d'octet
    client envoi j'ai recu
    server envoi un packet d'octet
    client envoi j'ai recu
    ...

    plutot que
    server envoi un packet
    server envoi un packet
    server envoi un packet
    server envoi un packet

    bon C sur maintentant G la certitude que tout arrive bien.. mais le fait que le client réponde a chaque fois ne va pas nuir a la rapiditée du transfert ???

  8. #8
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Logiquement oui...

    Un allé-retour au lieu d'un allé.

Discussions similaires

  1. [LWP Socket] Ma donnée n'arrive pas sur mon script
    Par svan1812 dans le forum Modules
    Réponses: 3
    Dernier message: 11/12/2008, 06h51
  2. [Socket] Creer Socket d'envoi UDP
    Par Metalman dans le forum Web & réseau
    Réponses: 0
    Dernier message: 20/11/2007, 23h14
  3. Socket et envoi d'image
    Par kheldoun ahmed dans le forum Delphi
    Réponses: 2
    Dernier message: 31/07/2007, 15h32
  4. windows socket, problème envoi de structure :s
    Par ramislebob dans le forum Réseau
    Réponses: 7
    Dernier message: 29/07/2006, 23h17
  5. [Socket] Probleme envois de message
    Par Pierrick584 dans le forum C++
    Réponses: 12
    Dernier message: 28/06/2006, 19h07

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