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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
from Tkinter import *
import tkFileDialog
from tkFileDialog import *
import tkMessageBox
from tkMessageBox import *
import os.path
import Tkinter as Tk
from random import randrange
import os.path
import socket, sys, threading, time
donnee = ""
nfichier = ""
pourcent = 0
progression100 = ""
fen1 = ""
temps = 0
b = 0
def parcourir():
global donnee, nfichier
nfichier = tkFileDialog.askopenfilename(filetypes = [("Choisis un fichier","*.*")], initialdir="C:/")
textl.configure(text = "Le fichier fait " + str(os.path.getsize(nfichier)) + " octets")
f = open(nfichier, "rb")
donnee = f.read()
f.close()
def ok():
global fen1, donnee, nfichier, pourcent, progression100, pboutton, text, textl, text2, entry, ok, temps, b
HOST = entry.get()
PORT = 50000
connect12 = 1
class ThreadReception(threading.Thread):
global pourcent, progression100, fen1, text, temps, nfichier, b
"""objet thread gérant la réception des messages"""
def __init__(self, conn):
threading.Thread.__init__(self)
self.connexion = conn # réf. du socket de connexion
def run(self):
global progression100, fen1, text, temps, nfichier, b
a = 0
while a < 100:
a = a+1
message_recu = self.connexion.recv(len(str(a-1)))
octets = (a * ((os.path.getsize(nfichier))/100))/(time.clock()-temps)
textl.configure(text = str(octets) + " o/s")
text.configure(text = str(message_recu) + " %")
message_recu = self.connexion.recv(1024)
text.configure(text = str(message_recu) + " %")
b = b+1
print "FIN"
th_R._Thread__stop()
class ThreadEmission(threading.Thread):
global temps, b
"""objet thread gérant l'émission des messages"""
def __init__(self, conn):
threading.Thread.__init__(self)
self.connexion = conn # réf. du socket de connexion
def run(self):
global temps, b
self.connexion.send(str(os.path.getsize(nfichier)))
print str(os.path.getsize(nfichier))
temps = time.clock()
self.connexion.send(os.path.basename(nfichier))
self.connexion.send(donnee)
b = b+1
print "FIN2"
th_E._Thread__stop()
if donnee == "":
tkMessageBox.showinfo("Fichier incorrecte", "Clique sur parcourir ... pour choisir un fichier à envoyer !")
else:
# Programme principal - Établissement de la connexion :
connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
connexion.connect((HOST, PORT))
except socket.error:
connect12 = 0
if connect12 == 0:
tkMessageBox.showinfo("La connexion a échoué", "L'adresse IP du destinataire est fausse ou il n'est pas disponible pour le momment !")
else:
print "FENETRE 1 DETRUIT"
fen1.title("Transfer en cours")
textl.configure(text = "x o/s")
text.grid(row = 0, padx = 100, pady = 10)
textl.grid(row = 1, padx = 100, pady = 10)
pboutton.destroy()
text2.destroy()
entry.destroy()
ok.destroy()
# Dialogue avec le serveur : on lance deux threads pour gérer
# indépendamment l'émission et la réception des messages :
th_E = ThreadEmission(connexion)
th_R = ThreadReception(connexion)
th_E.start()
th_R.start()
c = 0
while c < 1:
if b == 2:
tkMessageBox.showinfo("Fichier envoyé", "Le fichier a été correctement envoyer ! ")
connexion.close()
fen1.destroy()
break
fen1 = Tk.Tk()
fen1.title("Envoie de fichier")
text = Label(fen1, text = "Choisis le fichier à envoyer")
text.grid(row = 0, padx = 50, pady = 20)
pboutton = Button(fen1, text = " Parcourire ... ", command = parcourir)
pboutton.grid(row = 5, column = 0, padx = 10 , pady = 0)
textl = Label(text = "")
textl.grid(row = 8, pady = 20)
text2 = Label(text = "HOST")
text2.grid(row = 9)
entry = Entry(fen1)
entry.grid(row = 10)
ok = Button(fen1, text = " Envoyer ", command = ok)
ok.grid(row = 11, pady = 20)
fen1. mainloop() |
Partager