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 :

Envoi de fichiers


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut Envoi de fichiers
    Salut

    Je travaille sur un projet qui me prend 190384% de mon temps, mon énergie, ma patience, bref qui me laisse à bout
    J'essaye depuis plus d'un mois maintenant de lui intégrer une fonction d'envoie de fichiers sur le réseau.

    Alors j'ouvre le fichier en lecture binaire coté serveur, et j'envoie octet par octet au client, qui lui se charge de les stocker dans un fichier ouvert en mode écriture binaire. le fichier est bel et bien créé, MAIS il a une taille de 0,000ko
    bref c'est un fichier vide.

    PS: Pour les sources, je ne les ai pas maintenant, je les posterai dès que possible si vous voulez

    Merci pour l'aide que vous pourrez m'apporter

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Avec si peu d'infos, ça va être très difficile de t'apporter ne serait-ce qu'un début d'aide. Mais avant toute chose :

    − Tu travailles sous quel système d'exploitation ?
    − Avec quel compilateur ?
    − Quel méthode utilises-tu pour communiquer entre ton client et ton serveur ? Des sockets ?

    On attend le code source, effectivement.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut
    Ah oui, désolé
    je suis sous linux (mais le code est facilement portable)
    j'utilise gcc, et pour la com je use bien sûr les sockets

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut
    Désolé pour le retard, voici les sources
    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
    19
    int upload_file (const SOCKET sock, FILE* file){
        char ch [4] ;  //on enverra les octets 4 par 4
        printf ("{*} Uploading %s ...\n", str) ;
        while (fgets (ch, 2, file) != NULL) { // tant qu'on peut lire dans le ficher
            if (send (sock, &ch, 1, 0) == SOCKET_ERROR) { // s'il y a une erreur durant l'envoie
                perror ("{-} Failed during the upload ...\n") ;
                fclose (file) ;
                return 0 ;
            }
        }
        if (send (sock, "EOF", 4, 0) == SOCKET_ERROR) { // On envoie un EOF que le serveur n'écrira pas dans le fichier
            perror ("{-} Failed while sending last char ...\n") ;
            fclose (file) ;
            return 0 ;
        }
        printf ("{*} Successfuly uploaded the file : %s ...\n", str) ;
        fclose(file) ; //close the opened file
        return 1 ;
    }
    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
     
    int download_file (const SOCKET sock, FILE* file) {
        char ch [4] ; 
        while (1) { // tant qu'on n'a pas reçu l'EOF 
          if (recv (sock, ch, 4, 0) == SOCKET_ERROR) {
            perror ("{-} Failed while downloading the file ...\n") ;
            fclose (file) ;
            return 0 ;
          } else {
            if (!strcmp (ch, "EOF"))
              break ;
            fputs (ch, file) ;
        }
        printf ("{*} Successfuly downloaded the file\n") ;
        fclose(file) ; //close the file
        return 1 ;
    }
    merci de votre patience

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Hmm. Déjà, les fonctions d'ouverture du fichier et des sockets sont en dehors des fonctions que tu nous montres. Donc, on peut dire que le fichier de destination sera forcément créé, et que l'on ne sait pas du tout si la connexion a eu lieu.

    Ensuite, tu arrives à compiler avec des symboles comme const SOCKET et SOCKET_ERROR ? Ce sont des symboles Win32. Sous Linux, ils ne sont pas définis par défaut.

    Les fonctions send() et recv() renvoient soit le nombre d'octets réellement transmis ou reçus (qui peut être 0, ce que l'on assimile comme une fermeture du canal, côté réception), soit « -1 » en cas d'erreur, selon la man page.

    Si SOCKET_ERROR est défini quelque part mais ne vaut pas « -1 », tu ne détecteras jamais tes erreurs.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut
    pour le type SOCKET (un int) et SOCKET_ERROR (-1) j'ai fait les typedef et les define nécessaires donc pas d'erreur de compilation
    pour ce qui est de la connexion elle a bien lieu, ça envoie sans problème les char[] et les structures

Discussions similaires

  1. [debutant] envoi de fichier
    Par djchow dans le forum MFC
    Réponses: 8
    Dernier message: 21/03/2005, 16h57
  2. [HTTP] Envoi de fichiers par http
    Par Delendial dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 03/09/2004, 09h37
  3. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58
  4. [C#] Envoi de fichier xml
    Par minnieBis dans le forum ASP.NET
    Réponses: 16
    Dernier message: 25/05/2004, 14h28
  5. [Socket]envoie de fichier!!!
    Par SamDaKap dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/11/2002, 08h07

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