begin process at 2012 05 24 05:26:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & internet

 > TRANSFERT DE FICHIER PAR SOCKET

TRANSFERT DE FICHIER PAR SOCKET


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & internet Classé sous :socket, fichier, binaire, transfert Niveau :Débutant Date de création :01/08/2011 Date de mise à jour :01/08/2011 12:54:28 Vu :2 205

Auteur : Guillamue06

Ecrire un message privé
Site perso
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Voici un script pour transférer un fichier par socket. Le programme fait serveur si on indique aucun non de fichier.

Possibilité d'accepté ou non le fichier ainsi que l'affichage du % du transfert dès deux cotés (client / serveur).

Testé avec un fichier de 1,2go.

Cette source pourra aider les débutants à comprendre comment ouvrir un fichier un mode binaire et de le transférer par paquet de 1024 octets.

Source

  • ##################################################################
  • # PySTFS : Systeme de transfert de fichier par socket en Python
  • # Version 0.1
  • # Developpeur : Moreau Guillaume
  • # Contact : XXXXXXXXXXXXXXXXXXXXXX
  • # Revision par :
  • ##################################################################
  • import time, socket, os
  • socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • print ""
  • print " ##################################################################"
  • print " # PySTFS : Systeme de transfert de fichier par socket en Python"
  • print " # Developpeur : Moreau Guillaume "
  • print " # Contact : XXXXXXXXXXXXXXX"
  • print " ##################################################################"
  • print ""
  • nomFich = raw_input(" >> Nom du fichier a envoyer (ou rien pour recevoir) : ")
  • ##################################################################
  • # PARTIE ENVOIE DU FICHIER
  • ##################################################################
  • if nomFich != "":
  • try:
  • fich = open(nomFich, "rb") # test si le fichier existe
  • fich.close()
  • except:
  • print " >> le fichier '" + nomFich + "' est introuvable."
  • time.sleep(2)
  • exit()
  • octets = os.path.getsize(nomFich) / 1024
  • print " >> OK : '" + nomFich + "' [" + str(octets) + " Ko]"
  • print ""
  • # Connexion au serveur
  • ############################################
  • host = raw_input(" >> Adresse IP du serveur : ")
  • print " >> Connexion en cours avec " + host + "..."
  • try:
  • socket.connect((host, 2110)) # test si le serveur existe
  • except:
  • print " >> le serveur '" + host + "' est introuvable."
  • time.sleep(2)
  • exit()
  • print ""
  • print " >> Vous etes connecte au serveur, patientez d'une reponse..."
  • print ""
  • socket.send("NAME " + nomFich + "OCTETS " + str(octets)) # Envoi du nom et de la taille du fichier
  • # Boucle temps que l'ont est connecte
  • ############################################
  • while (socket.connect):
  • recu = socket.recv(1024)
  • if not recu : break
  • if recu == "GO": # Si le serveur accepte on envoi le fichier
  • print " >> Le serveur accepte le transfert"
  • print time.strftime(" >> [%H:%M] transfert en cours veuillez patienter...")
  • print " "
  • num = 0
  • pourcent = 0
  • octets = octets * 1024 # Reconverti en octets
  • fich = open(nomFich, "rb")
  • if octets > 1024: # Si le fichier est plus lourd que 1024 on l'envoi par paquet
  • for i in range(octets / 1024):
  • fich.seek(num, 0) # on se deplace par rapport au numero de caractere (de 1024 a 1024 octets)
  • donnees = fich.read(1024) # Lecture du fichier en 1024 octets
  • socket.send(donnees) # Envoi du fichier par paquet de 1024 octets
  • num = num + 1024
  • # Condition pour afficher le % du transfert (pas trouve mieu) :
  • if pourcent == 0 and num > octets / 100 * 10 and num < octets / 100 * 20:
  • print " >> 10%"
  • pourcent = 1
  • elif pourcent == 1 and num > octets / 100 * 20 and num < octets / 100 * 30:
  • print " >> 20%"
  • pourcent = 2
  • elif pourcent < 3 and num > octets / 100 * 30 and num < octets / 100 * 40:
  • print " >> 30%"
  • pourcent = 3
  • elif pourcent < 4 and num > octets / 100 * 40 and num < octets / 100 * 50:
  • print " >> 40%"
  • pourcent = 4
  • elif pourcent < 5 and num > octets / 100 * 50 and num < octets / 100 * 60:
  • print " >> 50%"
  • pourcent = 5
  • elif pourcent < 6 and num > octets / 100 * 60 and num < octets / 100 * 70:
  • print " >> 60%"
  • pourcent = 6
  • elif pourcent < 7 and num > octets / 100 * 70 and num < octets / 100 * 80:
  • print " >> 70%"
  • pourcent = 7
  • elif pourcent < 8 and num > octets / 100 * 80 and num < octets / 100 * 90:
  • print " >> 80%"
  • pourcent = 8
  • elif pourcent < 9 and num > octets / 100 * 90 and num < octets / 100 * 100:
  • print " >> 90%"
  • pourcent = 9
  • else: # Sinon on envoi tous d'un coup
  • donnees = fich.read()
  • socket.send(donnees)
  • fich.close()
  • print ""
  • print time.strftime(" >> Le %d/%m a %H:%M transfert termine !")
  • socket.send("BYE") # Envoi comme quoi le transfert est fini
  • ##################################################################
  • # CREATION DU SERVEUR
  • ##################################################################
  • else :
  • print " >> Creation du serveur (le pare feu peut alerter)"
  • socket.bind(("0.0.0.0", 2110)) # Creation du serveur
  • socket.listen(1) # Mise en ecoute d'un client
  • print " >> Attente d'une nouvelle connexion..."
  • conn, adresse = socket.accept() # accepte le client
  • print ""
  • print " >> Vous etes connecte avec : " + adresse[0]
  • print ""
  • accepte = "non"
  • num = 0
  • pourcent = 0
  • # Boucle temps que l'ont est connecte
  • ############################################
  • while (conn.connect):
  • recu = ""
  • recu = conn.recv(1024)
  • if not recu : break
  • if accepte == "non": # Condition si on a pas deja envoyer le nom et la taille du fichier
  • nomFich = recu.split("NAME ")[1]
  • nomFich = nomFich.split("OCTETS ")[0]
  • taille = recu.split("OCTETS ")[1]
  • print " >> Fichier '" + nomFich + "' [" + taille + " Ko]"
  • accepte = raw_input(" >> Acceptez vous le transfert [o/n] : ") # demande si on accepte ou pas le transfert
  • if accepte == "o" or accepte == "oui": # Si oui en lenvoi au client et on cree le fichier
  • conn.send("GO")
  • print time.strftime(" >> [%H:%M] transfert en cours veuillez patienter...")
  • print ""
  • f = open(nomFich, "wb")
  • identifier = "oui"
  • taille = int(taille) * 1024 # Conversion de la taille en octets pour le %
  • else :
  • conn.send("Bye") # Si pas accepte on ferme le programme
  • exit()
  • elif recu == "BYE": # Si on a recu "BYE" le transfer est termine
  • f.close()
  • print ""
  • print time.strftime(" >> Le %d/%m a %H:%M transfert termine !")
  • else: # Sinon on ecrit au fur et a mesure dans le fichier
  • f.write(recu)
  • if taille > 1024: # Si la taille est plus grande que 1024 on s'occupe du %
  • # Condition pour afficher le % du transfert :
  • if pourcent == 0 and num > taille / 100 * 10 and num < taille / 100 * 20:
  • print " >> 10%"
  • pourcent = 1
  • elif pourcent == 1 and num > taille / 100 * 20 and num < taille / 100 * 30:
  • print " >> 20%"
  • pourcent = 2
  • elif pourcent < 3 and num > taille / 100 * 30 and num < taille / 100 * 40:
  • print " >> 30%"
  • pourcent = 3
  • elif pourcent < 4 and num > taille / 100 * 40 and num < taille / 100 * 50:
  • print " >> 40%"
  • pourcent = 4
  • elif pourcent < 5 and num > taille / 100 * 50 and num < taille / 100 * 60:
  • print " >> 50%"
  • pourcent = 5
  • elif pourcent < 6 and num > taille / 100 * 60 and num < taille / 100 * 70:
  • print " >> 60%"
  • pourcent = 6
  • elif pourcent < 7 and num > taille / 100 * 70 and num < taille / 100 * 80:
  • print " >> 70%"
  • pourcent = 7
  • elif pourcent < 8 and num > taille / 100 * 80 and num < taille / 100 * 90:
  • print " >> 80%"
  • pourcent = 8
  • elif pourcent < 9 and num > taille / 100 * 90 and num < taille / 100 * 100:
  • print " >> 90%"
  • pourcent = 9
  • num = num + 1024
##################################################################
# PySTFS : Systeme de transfert de fichier par socket en Python
# Version 0.1
# Developpeur : Moreau Guillaume
# Contact : XXXXXXXXXXXXXXXXXXXXXX
# Revision par :
##################################################################

import time, socket, os
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ""
print " ##################################################################"
print " # PySTFS : Systeme de transfert de fichier par socket en Python"
print " # Developpeur : Moreau Guillaume "
print " # Contact : XXXXXXXXXXXXXXX"
print " ##################################################################"
print ""

nomFich = raw_input(" >> Nom du fichier a envoyer (ou rien pour recevoir) : ")

##################################################################
# PARTIE ENVOIE DU FICHIER
##################################################################
if nomFich != "":
    try:
        fich = open(nomFich, "rb") # test si le fichier existe
        fich.close()
    except:
        print " >> le fichier '" + nomFich + "' est introuvable."
        time.sleep(2)
        exit()

    octets = os.path.getsize(nomFich) / 1024
    print " >> OK : '" + nomFich + "' [" + str(octets) + " Ko]"
    print ""


    # Connexion au serveur
    ############################################
    host = raw_input(" >> Adresse IP du serveur : ")
    print " >> Connexion en cours avec " + host + "..."
    try:
        socket.connect((host, 2110)) # test si le serveur existe
    except:
        print " >> le serveur '" + host + "' est introuvable."
        time.sleep(2)
        exit()
        
    
    print ""
    print " >> Vous etes connecte au serveur, patientez d'une reponse..."
    print ""
    socket.send("NAME " + nomFich + "OCTETS " + str(octets)) # Envoi du nom et de la taille du fichier  


    # Boucle temps que l'ont est connecte
    ############################################
    while (socket.connect):

        recu = socket.recv(1024)
        if not recu : break

        if recu == "GO": # Si le serveur accepte on envoi le fichier
            print " >> Le serveur accepte le transfert"
            print time.strftime(" >> [%H:%M] transfert en cours veuillez patienter...")
            print " "

            num = 0
            pourcent = 0
            octets = octets * 1024 # Reconverti en octets
            fich = open(nomFich, "rb")

            if octets > 1024:	# Si le fichier est plus lourd que 1024 on l'envoi par paquet
                for i in range(octets / 1024):        
                
                        fich.seek(num, 0) # on se deplace par rapport au numero de caractere (de 1024 a 1024 octets)
                        donnees = fich.read(1024) # Lecture du fichier en 1024 octets                            
                        socket.send(donnees) # Envoi du fichier par paquet de 1024 octets
                        num = num + 1024
                
                        # Condition pour afficher le % du transfert (pas trouve mieu) :
                        if pourcent == 0 and num > octets / 100 * 10 and num < octets / 100 * 20:
                            print " >> 10%"
                            pourcent = 1
                        elif pourcent == 1 and num > octets / 100 * 20 and num < octets / 100 * 30:
                            print " >> 20%"
                            pourcent = 2
                        elif pourcent < 3 and num > octets / 100 * 30 and num < octets / 100 * 40:
                            print " >> 30%"
                            pourcent = 3
                        elif pourcent < 4 and num > octets / 100 * 40 and num < octets / 100 * 50:
                            print " >> 40%"
                            pourcent = 4
                        elif pourcent < 5 and num > octets / 100 * 50 and num < octets / 100 * 60:
                            print " >> 50%"
                            pourcent = 5
                        elif pourcent < 6 and num > octets / 100 * 60 and num < octets / 100 * 70:
                            print " >> 60%"
                            pourcent = 6
                        elif pourcent < 7 and num > octets / 100 * 70 and num < octets / 100 * 80:
                            print " >> 70%"
                            pourcent = 7
                        elif pourcent < 8 and num > octets / 100 * 80 and num < octets / 100 * 90:
                            print " >> 80%"
                            pourcent = 8
                        elif pourcent < 9 and num > octets / 100 * 90 and num < octets / 100 * 100:
                            print " >> 90%"                    
                            pourcent = 9

            else: # Sinon on envoi tous d'un coup
                donnees = fich.read()
                socket.send(donnees)

            fich.close()
            print ""
            print time.strftime(" >> Le %d/%m a %H:%M transfert termine !")
            socket.send("BYE") # Envoi comme quoi le transfert est fini



##################################################################
# CREATION DU SERVEUR
##################################################################
else :

    print " >> Creation du serveur (le pare feu peut alerter)"
    socket.bind(("0.0.0.0", 2110)) # Creation du serveur
    socket.listen(1) # Mise en ecoute d'un client
    
    print " >> Attente d'une nouvelle connexion..."
    conn, adresse = socket.accept() # accepte le client

    print ""
    print " >> Vous etes connecte avec : " + adresse[0]
    print ""

    accepte = "non"
    num = 0
    pourcent = 0
    # Boucle temps que l'ont est connecte
    ############################################
    while (conn.connect):
        recu = ""
        recu = conn.recv(1024)
        if not recu : break

        if accepte == "non": # Condition si on a pas deja envoyer le nom et la taille du fichier
                nomFich = recu.split("NAME ")[1]
                nomFich = nomFich.split("OCTETS ")[0]
                taille = recu.split("OCTETS ")[1]
                print " >> Fichier '" + nomFich + "' [" + taille + " Ko]"

                accepte = raw_input(" >> Acceptez vous le transfert [o/n] : ") # demande si on accepte ou pas le transfert                               

                if accepte == "o" or accepte == "oui": # Si oui en lenvoi au client et on cree le fichier
                    conn.send("GO")
                    print time.strftime(" >> [%H:%M] transfert en cours veuillez patienter...")
                    print ""
                    f = open(nomFich, "wb")
                    identifier = "oui"
                    taille = int(taille) * 1024 # Conversion de la taille en octets pour le %
                                        
                else :
                    conn.send("Bye") # Si pas accepte on ferme le programme
                    exit()


        
        elif recu == "BYE": # Si on a recu "BYE" le transfer est termine
            f.close()
            print ""
            print time.strftime(" >> Le %d/%m a %H:%M transfert termine !")
            
        else: # Sinon on ecrit au fur et a mesure dans le fichier
            f.write(recu)

            if taille > 1024: # Si la taille est plus grande que 1024 on s'occupe du %

                # Condition pour afficher le % du transfert :
                if pourcent == 0 and num > taille / 100 * 10 and num < taille / 100 * 20:
                    print " >> 10%"
                    pourcent = 1
                elif pourcent == 1 and num > taille / 100 * 20 and num < taille / 100 * 30:
                    print " >> 20%"
                    pourcent = 2
                elif pourcent < 3 and num > taille / 100 * 30 and num < taille / 100 * 40:
                    print " >> 30%"
                    pourcent = 3
                elif pourcent < 4 and num > taille / 100 * 40 and num < taille / 100 * 50:
                    print " >> 40%"
                    pourcent = 4
                elif pourcent < 5 and num > taille / 100 * 50 and num < taille / 100 * 60:
                    print " >> 50%"
                    pourcent = 5
                elif pourcent < 6 and num > taille / 100 * 60 and num < taille / 100 * 70:
                    print " >> 60%"
                    pourcent = 6
                elif pourcent < 7 and num > taille / 100 * 70 and num < taille / 100 * 80:
                    print " >> 70%"
                    pourcent = 7
                elif pourcent < 8 and num > taille / 100 * 80 and num < taille / 100 * 90:
                    print " >> 80%"
                    pourcent = 8
                elif pourcent < 9 and num > taille / 100 * 90 and num < taille / 100 * 100:
                    print " >> 90%"                    
                    pourcent = 9
                    
                num = num + 1024
            

 Conclusion

Je me suis pas amusé à trouver mieux pour l'affichage des %


 Historique

01 août 2011 12:54:28 :
Mon adresse email....

 Sources du même auteur

CALCULE LA FRÉQUENCE DU CPU
SOCKET MULTITHREAD SIMPLE
PYSCANLOG SCANNER DE FICHIER LOG

 Sources de la même categorie

SOCKET MULTITHREAD SIMPLE par Guillamue06
Source avec une capture AUTO-FOLLOW/UNFOLLOW [TWITTER] EN [PERL] UTILISANT NET::TWIT... par GeroXXXX
Source avec Zip PINGEUR RÉSEAU par jeanbleo44
Source avec Zip Source avec une capture LISTING ET LOGS DES CONNEXIONS ET DECONNEXIONS DE MACHINES Q... par saigneurdushi
Source avec Zip Source avec une capture REMOTE WINDOWS PROMPT par NqrK

 Sources en rapport avec celle ci

SOCKET MULTITHREAD SIMPLE par Guillamue06
Source avec une capture TRIER SES FILMS PAR GENRE - INTERFACE ZENITY OU LIGNE DE COM... par sarathai
LE GLOUTON ! [MANGE ET RECRACHE LES FICHIERS QU IL TROUVE D... par saigneurdushi
PYSCANLOG SCANNER DE FICHIER LOG par Guillamue06
CHANGEMENT DE CASSE par linkid

Commentaires et avis

Commentaire de fnb le 30/08/2011 22:28:28

Bonjour,

Merci pour ton code il va me servir de base...
en effet, je cherche à créer un serveur qui servirait de "boîte aux lettres" pour des fichiers qui seraient uploadés  et que l'on récupérerait plus tard. Mon pb est que l'ip du serveur est dynamique et que je passe par internet et non en local. J'ai cherché sur internet pour l'adressage à une ip dynamique...et rien.
Merci pour ta réponse si tu connaît une méthode...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

TWISTED : Transfert de fichier [ par chmod666 ] Bonjour,je viens enfin de trouver ce qu'il me faut aprés bcps bcps de recherche il faut le dire ... Situation:J'ai un client qui envoie un fichierJ' TRansfert de fichier sous BlueTooth [ par bennouar ] BonjourJe recherche le source d'une application Python pour le transfert de fichiers dans le contexte d'une connexion bluetoothDjamal BENNOUAR [Python] Trouver l'IP d'un PC à partir d'un Pocket PC [ par sacrechipou ] Salut!Je suis en stage d'informatique et on m'a demandé à partir d'un pocket pc de récupérer l'adresse ip du PC auquel il est connecté.Ayant débuté le Probleme recv bloquant [ par mike1310 ] Bonjour à tous,je débute un peu dans le python et je suis sur un projet de socket. Je dois pouvoir communiquer avec un postfix pour, par la suite lui tri de fichier [ par mtanfin ] Bonjour;Alors voilà en fait je voudrais trier des fichiers en fonction de leur date de création. en fait le but est de regarder dans chaque fichier si Condition ne fonctionne pas [ par Fabrizio001 ] Bonjour,Je débute (1 semaine )en python et je sollicite votre aide. Voici ce que j'essaye de faire:Je veux contrôler le contenu d'un fichier .txt qui liste [ par Topnotch ] Bonjourje voudrais comparer deux listes:Plus précisement,  je voudrais comparer deux fichiers texte (fichier.txt) pour savoir si des lignes du fichier Réouvrir une socket precedemment fermée [ par mike1310 ] Bonjour à tous,J'aurais une petite question concernant les sockets. Dans le soft que je suis en train de créer, à un moment donner je suis obligé de f Bot IRC Python ... problème à l'ouverture de la socket [ par tcyrill2 ] Bonjour ici,   Voilà, on m'a filé les bases d'un bot IRC en python. Je sais qu'il fonctionne car j'ai eu l'occaz de le tester avec la personne qui me Perl to Python [ par mike1310 ] Bonjour,je ne savais pas trop ou poster mon message étant donné qu'il n'y a pas de codes sources pour Perl.J'ai en fait un code en Perl que je dois re


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,030 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales