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/Web Python Discussion :

Envoie de fichiers par les sockets [Python 3.X]


Sujet :

Réseau/Web 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
    Novembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 23
    Par défaut Envoie de fichiers par les sockets
    Bonjour, quand le code ouvre des documents textes il fonctionne mais quand j'essaie avec des images que j'ouvre en binaire ça ne fonctionne plus

    voici le code de l'envoyeur :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    """
    coded by Programind
    """
    import socket
    import time
     
    hote = 'localhost'
    port = 12800
     
     
     
    print("Verification...")
    start_time = time.time()
    f = open("image.png",'rb')
    fich = f.read()
    f.close()
    interval = time.time() - start_time
    print("Executé en {} seconde".format(round(interval)))
    print()
     
     
     
    print("Chargement du fichier...")
    start_time = time.time()
    liste = []
    for loop in fich:
        liste.append(str(loop).encode())
    interval = time.time() - start_time
    print("Executé en {} secondes".format(round(interval)))
    print()
     
     
     
    print("Preparation pour l'envoi...")
    start_time = time.time()
    nb = 0
    nb2 = 1024
    ct = -1
    temp = ''
    fichier = []
    while ct!=len(liste):
        ct += 1
        if nb<nb2:
            temp += liste[nb].decode()
            nb += 1
        elif nb==nb2:
            fichier.append(temp)
            temp = ''
            nb2 += 1024
            if nb2>len(liste):
                nb2 = len(liste)
            nb += 1
    interval = time.time() - start_time
    print("Executé en {} secondes".format(round(interval)))
    print("Taille du fichier : {} Ko".format(len(fichier)))
    print()
     
     
     
    start_time = time.time()
    conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn.connect((hote, port))
    print("Connexion établie avec le serveur ({}) sur le port {}".format(hote, port))
     
    for loop2 in range(len(fichier)):
        conn.send(fichier[loop2].encode())  
     
    print("Fermeture de la connexion")
    conn.send(b'')
    conn.close()
    interval = time.time() - start_time
    print("Executé en {} secondes".format(round(interval)))
    et le code du receveur :
    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
     
    """
    coded by Programind
    """
    import socket
     
    port = 12800
     
    f = open("image2.png",'wb')
    f.write(b'')
    f.close()
     
    conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    conn.bind(('', port))
    conn.listen(5)
    print("Le serveur écoute à présent sur le port {}".format(port))
    ccl, infos_connexion = conn.accept()
    print("Transfert en cours...")
     
    with open("image2.png",'ab') as f:
        while True:
            msg = ccl.recv(1024).decode()
            if msg!='':
                f.write(bin(int(msg)))
            else:
                f.close()
                print("Arret de la connexion")
                ccl.close()
                conn.close()
                break
    Je comprend pas où sont les problème et je m'y connais très peu en binaire dans python.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Citation Envoyé par l1nux Voir le message
    Je comprend pas où sont les problème et je m'y connais très peu en binaire dans python.
    Ce que vous lisez d'un fichier ouvert en mode binaire seront des "bytes" que vous pouvez directement transférer via socket.send.
    Sachant cela, la question est de savoir quel est l'intérêt d'ouvrir un fichier en mode texte pour faire ce transfert: en mode binaire, pas besoin d'encode/decode et de toutes façons, vous voulez transférer un "contenu" pas l'utiliser.

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 23
    Par défaut
    Merci de votre réponse rapide,
    si j'ai bien compris je n'ais pas besoin d'encoder mon fichier l'or de l'envoie et je peux l'envoyer sans l'ouvrir ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Citation Envoyé par l1nux Voir le message
    si j'ai bien compris je n'ais pas besoin d'encoder mon fichier l'or de l'envoie et je peux l'envoyer sans l'ouvrir ?
    Si j'ai écrit "un fichier ouvert en mode binaire", c'est qu'il va bien falloir l'ouvrir...

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

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 23
    Par défaut
    du coup j'ai fait ça pour l'envoyeur:
    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
     
    """
    coded by Programind
    """
    import socket
    import time
     
    hote = 'localhost'
    port = 12800
     
     
     
    start_time = time.time()
    conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn.connect((hote, port))
    print("Connexion établie avec le serveur ({}) sur le port {}".format(hote, port))
     
    with open("image.png",'rb') as f:
        conn.send(f.read())
    f.close()
     
    print("Fermeture de la connexion")
    conn.send(b'')
    conn.close()
    interval = time.time() - start_time
    print("Executé en {} secondes".format(round(interval)))
    et ça pour le receveur :
    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
     
    """
    coded by Programind
    """
    import socket
     
    port = 12800
     
     
     
    conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    conn.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    conn.bind(('', port))
    conn.listen(5)
    print("Le serveur écoute à présent sur le port {}".format(port))
    ccl, infos_connexion = conn.accept()
    print("Transfert en cours...")
     
    with open("image2.png",'ab') as f:
        while True:
            msg = ccl.recv(1024)
            if msg!='':
                f.write(msg)
            else:
                f.close()
                print("Arret de la connexion")
                ccl.close()
                conn.close()
                break
    Sauf que je n'arrive pas à couper la connexion.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Citation Envoyé par l1nux Voir le message
    Sauf que je n'arrive pas à couper la connexion.
    Relisez la condition d'arrêt côté serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if msg!='':
                f.write(msg)
            else:
                f.close()
    comme msg c'est des "bytes" et non des "str" il faut tester len(msg) ou comparer à b''.

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

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

Discussions similaires

  1. envoi de fichier par des Sockets java
    Par Maha Ing dans le forum MATLAB
    Réponses: 0
    Dernier message: 10/05/2014, 18h38
  2. Envoie de fichier par socket
    Par eracius dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 05/10/2007, 11h21
  3. Envoi de fichier par socket
    Par thebloodyman dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/08/2007, 17h07
  4. Envoi de fichier par socket
    Par dr_octopus74 dans le forum Réseau
    Réponses: 42
    Dernier message: 19/01/2007, 17h59
  5. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58

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