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

Windows Discussion :

[winsock2] Envoyer un binaire


Sujet :

Windows

  1. #1
    Membre régulier
    Avatar de SOAD08
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 101
    Points : 108
    Points
    108
    Par défaut [winsock2] Envoyer un binaire
    Bonjour,

    Je voudrais savoir comment envoyer une fichier binaire (image) par connection socket winsock2.

    Pour l'instant l'envoi fonctionne pour les fichiers textes et les fichiers sont ouverts ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ifstream fichier;
    fichier.open(fichier, ios::in | ios::binary);
    char a;
    string fichier("");
    while (fichier.read(a, 1)) {
        fichier += a;
    }
    j'envoi ensuite mon fichier avec un send() (après avoir converti la chaine en char *) et j'ecris le fichier dans un file.bin pour verifier la lecture.

    Pour un fichier texte pas de problème, par contre pour une image, file.bin est bien une image, donc pas de problème sur la lecture, mais impossible d'envoyer le fichier.

    Comment faire ? j'ai entendu parler d'encodage mime mais je n'ai pas trouvé beaucoup d'informations a ce sujet.

    Merci d'avance.
    www.cppreference.com ==> A lire pour vos problèmes touchant à la STL
    www.php.net ==> A lire avant de demander le fonctionnement d'une fonction PHP

    Alliance developpez Muzgo

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Dans la FAQ, tu as le code pour récupérer la taille du fichier. Partant de là, tu peux dimensionner un vector<char> et t'en servir comme buffer pour lire ton fichier en un seul coup, au lieu de faire caractère par caractère, ce qui est très lent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    size_t file_size = // voir FAQ;
    std::vector<char> buffer( file_size );
    fichier.read( &buffer[ 0 ], buffer.size() );
    pour ton erreur, il faut localiser le problème : lecture, envoie, réception ou écriture.
    Note que winsock fournit TransmitFile qui marche très bien.

  3. #3
    Membre régulier
    Avatar de SOAD08
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 101
    Points : 108
    Points
    108
    Par défaut
    Je retiens pour le vector merci mais comme je l'ai dis le probleme est au niveau de l'envoi.

    Je ne pense pas qua TransmitFile convienne puisque mon appli est un serveur WEB (pour les statistiques d'un jeu)
    www.cppreference.com ==> A lire pour vos problèmes touchant à la STL
    www.php.net ==> A lire avant de demander le fonctionnement d'une fonction PHP

    Alliance developpez Muzgo

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    TransmitFile ne fait rien de plus que lire le fichier et l'émettre, comme tu le fait à la main. Sauf que c'est optimisé et censé être plus performant, justement pour développer des serveurs moins gourmands.
    http://blogs.msdn.com/larryosterman/...03/207390.aspx

    En tous cas ce qui est sûr, c'est que sans code, on peut pas t'aider.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Réponse un peu tardive, mais oui, c'est bien par MIME que tu pourras envoyer un fichier binaire.

    Je travaille actuellement la dessus, je suis entrain de faire des tests avec deux programmes (serveur et client) en passant par une fonction que je me suis créé et qui encode en base64.

Discussions similaires

  1. Web API: Envoyer un binaire
    Par Oberown dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 30/04/2014, 16h56
  2. Envoyer des floats continuement dans un binaire
    Par shaiHulud dans le forum Général Python
    Réponses: 6
    Dernier message: 14/01/2014, 11h47
  3. Comment envoyer des fichiers avec winsock2 ?
    Par x-programer dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 08/02/2009, 08h29
  4. Réponses: 9
    Dernier message: 04/06/2008, 11h38

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