Accueil > > > TRANSFERT DE FICHIER PAR SOCKET
TRANSFERT DE FICHIER PAR SOCKET
Information sur la source
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
Sources de la même categorie
Commentaires et avis
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
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|