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

Python Discussion :

Transfert de fichiers entre debian et mac: reception de la moitié du fichier [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut Transfert de fichiers entre debian et mac: reception de la moitié du fichier
    Bonjour, je fais un transfert de fichier entre Debian(serveur) et Mac(client).
    Les fichiers sont bien transférés sauf le dernier, le plus gros (6Ko), qui est coupé au milieu, à la réception le fichier ne fait plus que 3Ko.

    J'ai fais le même test entre deux mac et je n'ai pas ce problème!

    le script serveur sur Debian:

    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
     
    class ClientThread(threading.Thread):
        def __init__(self, ip, port, clientsocket):
        def envoi(self):
            print("envoi")
            print("Connection de %s %s" % (self.ip, self.port, ))
            maliste = ['iax.conf','meetme.conf','users.conf','extensions.conf']
            x = 0
            while 1:
                r = clientsocket.recv(2048)
                if r == b"":
                    break
                fichier = open(r, 'r')
                shutil.copyfile(r, sousDossierLogs+'/'+ maliste[x])
                f = fichier.read(999999999)
                data = encrypt(f)
                self.clientsocket.send(data)
                fichier.close()
                x += 1
            print("Client déconnecté...")
            self.clientsocket.close()
    et le script de réception (sur le Mac)
    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
     
    def telechargementFichier(host,port, dossier):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((host, port))
        flagServ = "EEEEEEEE"
        s.send(flagServ.encode())
        maliste = ['iax.conf','meetme.conf','users.conf','extensions.conf']
        x = 0
        while x < 4 :
            fileName = dossierS + '/' + maliste[x]
            s.send(fileName.encode())
            file = dossier + '/' + maliste[x]
            print(file)
            r = s.recv(999999999)
            print(r)
            d = decrypt(r)
            print(d)
            with open(file,'a') as _file:
                _file.write(d)
                _file.close()
            x += 1
        s.close()
    Auriez-vous une piste pour régler ce problème?
    Merci!

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut
    De plus, l'erreur obtenue change:
    parfois il n'indique pas d'erreur mais le dernier fichier reçu (le plus gros, 6Ko) ne fais que la moitié de sa taille originale donc 3Ko,
    parfois aucune erreur n'est indiquée mais le dernier fichier n'est pas du tout reçu (mais pourtant bien envoyé) et
    parfois une erreur est indiquée à la réception: (la fonction de déchiffrement indique que le message n'est pas un multiple de 16 et donc bogue)
    ValueError: Input strings must be a multiple of 16 in length

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je suis loin d'avoir tout épluché, mais j'ai au moins 2 remarques:

    - script serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        def __init__(self, ip, port, clientsocket):
        def envoi(self):
    => Pb d'indentation.

    - script de réception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            with open(file,'a') as _file:
                _file.write(d)
                _file.close()
    Avec with, il ne faut pas utiliser close: la sortie du bloc de code sous with le déclenche automatiquement. Cela veut dire qu'il est lancé ici 2 fois.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut
    Salut tyrtamos,
    merci de ta réponse.

    Pour le script serveur, l'indentation est normale car les deux fonctions se trouvent dans une classe et je n'ai pas collé ici le contenu de la fonction __init__ pour ne pas être trop long...
    Et pour le client, j'ai bien supprimé le _file.close(), merci pour cette info.

    Mais mon problème reste tjs le même...

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    De toutes façons, vous faîtes l'hypothèse que les données d'un fichier expédiées en un seul .send pourront être reçues par un seul .recv. En fait la pile TCP/IP peut fragmenter les données en fonction de plusieurs paramètres et vous devez éventuellement les ré-assembler vous même (via faire plusieurs .recv).

    Pour tester çà, expédiez seulement le contenu du gros fichier et regarder en combien de .recv la pile IP les aura transmis.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Par défaut
    Question: Est-ce que des deux coté, c'est le même Python (2 ou 3)?

    Je sais que par défaut, sur mac osx c'est py2 mais je me demande si sous debian ce ne serait pas py3.

    Or en py3, les chaînes sont codé en unicode par défaut alors qu'en py2 c'est en chaîne normale.
    Et il me semble que la différence de ces 2 types de chaînes c'est justement un rapport x2 en octet.

    A vérifier.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Partage de fichier entre debian et windows
    Par Amargoo dans le forum Sécurité
    Réponses: 2
    Dernier message: 28/03/2011, 08h29
  2. Réponses: 2
    Dernier message: 06/02/2008, 17h23
  3. transfert d'information entre des fichiers
    Par Amallric dans le forum Langage
    Réponses: 10
    Dernier message: 21/09/2006, 08h50
  4. Transfert de Valeurs entre 2 fichiers PHP ?
    Par caviar dans le forum Langage
    Réponses: 4
    Dernier message: 27/04/2006, 12h10
  5. Partage de fichier entre Linux et Mac
    Par maddog2032 dans le forum Réseau
    Réponses: 3
    Dernier message: 14/04/2005, 08h32

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