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 :

FTP en socket c


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut FTP en socket c
    salut,

    Comment transmettre des données binaire (type mp3 ou video) entre PC à l'aide des sockets c?
    Je sais le faire avec du texte (send...)mais pas avec le binaire.

    merci de vos éventuels réponses

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    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 485
    Par défaut
    Bonjour,

    send() ne fait aucune distinction entre les fichiers texte en particulier et les fichiers binaire en général. L'appel reçoit en argument un pointeur vers les données à envoyer et la longueur de ces données.

    À toi d'envoyer le contenu de ton fichier de la même façon, en le fragmentant éventuellement.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    j'a réussi a envoye un fichier binaire ,mais je dois découper le fichier en morceau de 4 octets sinon il est corrompu à l'arrivé
    voici le code de ma fonction téléchergement et upload

    coté serveur
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    int upload(const char* fichier,int socket,int buff)
    	{
    		FILE *fs;
        int octet_envoye;
        int taille_fichier;
        unsigned char *buffer;
     
        fs = fopen(fichier, "rb");
    int deplacement=50;
        fseek(fs, 0, SEEK_END);
        taille_fichier =  ftell(fs);
        buffer = malloc(buff);
        fseek(fs, 0, SEEK_SET);
        int octet_total=0;
     int taille_temporaire=ftell(fs);
     
    while  (taille_temporaire!=taille_fichier)
       {
        fread(buffer,sizeof(char),buff,fs);
    	octet_envoye=send(socket, buffer, sizeof(buffer), 0);
     
    	if(octet_envoye<0)
    	{
    		perror("erreur de send");
    		return 1;
    	}
    	printf("le nombre d'octet envoyé est %d\n",octet_envoye);
     
    	taille_temporaire=ftell(fs);
    	octet_total+=octet_envoye;
    	printf("nombre total d'octet envoye est %d \n",octet_total);
         printf("voici la taille temporaire est %d\n",taille_temporaire);
         printf("le nombre d'octet envoyé est %d\n",octet_envoye);
     
    }   
     
    	return 0;
    }

    coté client la fonction telechargement
    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
    20
    21
    22
    23
    24
    25
    26
    27
    int telechargement(const char *fichier,int socket,int buff)
    	{
    		 FILE* fd;
    unsigned char *buffer;
    buffer=malloc(buff);
    fd=fopen(fichier,"ab");
    int octet_recu=0;
     
    int taille_fichier=65115;
    fseek(fd, 0, SEEK_SET);
     int taille_temporaire=ftell(fd);
     taille_temporaire=0;
    while(taille_temporaire<=taille_fichier)
    {
    octet_recu=recv(socket, buffer, sizeof(buffer), 0);
    if(octet_recu<0)
    {
    	perror("erreur recv");
    }
    printf("le nombre d'octet reçu est %d\n",octet_recu);
    fwrite(buffer,sizeof(char),buff,fd);
    taille_temporaire=ftell(fd);
    printf("la taille temporaire est %d \n",taille_temporaire);
    }
     fclose(fd);
     return 0;
    }

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    "sizeof(buffer)" n'est pas la taille du buffer ; c'est la taille d'un pointeur vers un char (probablement 4 octets sur ton architecture, ce qui explique tu tu ne peux pas lire plus de 4 octets à la fois côté client). Ce que tu veux c'est lire et envoyer "buff" octets (le nom de la variable est mal choisi, d'ailleurs).

  5. #5
    Membre émérite

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Septembre 2010
    Messages : 450
    Par défaut
    Petite remarque qui n'est pas en rapport avec ton problème technique:
    Soit pertinent et cohérent dans tes noms de méthodes et de variables.

    Ici, tu appelles la fonction qui envoie "upload", ce qui est le terme en anglais, et ta fonction de téléchargement "telechargement", ce qui est le terme français.

    Il y a des fautes, au niveau de la langue française, dans tes noms de variable, par exemple "int octet_envoye;" auquel il manque un "s". C'est important, car sinon on peut comprendre que cela veut dire "l'octet que j'ai envoyé". Or, cela correspond au nombre d'octetS que tu as envoyé, ce qui n'est pas pareil.

    Des bons noms de méthodes et variables sont essentiels pour que ton code soit lisible et compréhensible. Si tu le relis dans 6 mois, ou pire, si tu le lègue à quelqu'un d'autre, des mauvais noms vont augmenter le temps nécessaire pour reprendre ton code, à cause du temps de compréhension.

    Il y a des gens qui pensent que tout doit être codé en Anglais, je suis de ce camp là, mais c'est encore un autre débat.
    Si vous moinsez, merci de répondre pour argumenter!
    Ma présentation

Discussions similaires

  1. fonctionnement du mécanisme ftp socket ?
    Par totoche dans le forum Développement
    Réponses: 0
    Dernier message: 01/07/2009, 12h00
  2. FTP : socket error
    Par Kropernic dans le forum Web & réseau
    Réponses: 2
    Dernier message: 05/07/2007, 15h52
  3. Envoyer un fichier via FTP via un socket
    Par JnJp28 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 24/05/2007, 20h37
  4. [Socket] Créer un serveur FTP.
    Par marchand_de_sable dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 04/10/2006, 18h05
  5. Sockets et Sockets ssl FTPS
    Par Emplyst dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 15/07/2006, 13h54

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