diff --git a/Raspberry/Module_4G/processusEnvoi4G.py b/Raspberry/Module_4G/processusEnvoi4G.py
old mode 100644
new mode 100755
index 876cdffdd9a5040dc117ad2028b4684342df684c..8accb44cca20a3c611dce1628759a13cddd70ed5
--- a/Raspberry/Module_4G/processusEnvoi4G.py
+++ b/Raspberry/Module_4G/processusEnvoi4G.py
@@ -1,14 +1,109 @@
-#Python 3.5
+# A executer avec SUDO
+# PYTHON 3.5+
+
+import subprocess
+import time
 import socket
 import sys
+import os
+import os.path
+from datetime import datetime
+import psutil
+
+def check_pid(pid):
+	# Verifie l'existence d'un pid
+	if psutil.pid_exists(pid):
+		p = psutil.Process(pid)
+		if p.status() != psutil.STATUS_ZOMBIE:
+			return True
+	return False
+
+
+# Verifie qu'il n'y a pas d'autres processus d'envoi en verifiant le fichier lock
+if os.path.isfile("./.lockprocess"): print("Locked")
+while os.path.isfile("./.lockprocess"): time.sleep(1)
 
+# Creer un nouveau fichier lock pour verrouiller les autres processus
+if not os.path.isfile("./.lockprocess"):
+	open(".lockprocess", "a").close()
+	subprocess.Popen(["chmod", "777", ".lockprocess"])
+else: # Si un processus s'est activée entre la 1ere boucle et la condition
+	while os.path.isfile("./.lockprocess"): time.sleep(1)
+	open(".lockprocess", "a").close()
+	subprocess.Popen(["chmod", "777", ".lockprocess"])
+
+IP_PC = "91.162.19.165"
+PORT = 20000
 nomFichier = sys.argv[1]
-print(nomFichier)
-sock = socket.socket()
-sock.connect(('localhost', 3400))
-print("Debut processus envoi")
-with open(nomFichier, 'rb') as f:
-	print("SEND")
-	sock.sendfile(f, 0)
-sock.close()
-print("Fin processus emvoi")
+chemin = nomFichier.split("/")
+
+log = open("log/"+chemin[1]+".log", "w")
+f = None
+
+
+try:
+	pid = subprocess.Popen(["wvdial"])
+
+	print("============ WVDIAL LANCE ==============")
+	print("PID = ",pid.pid)
+
+	time.sleep(10)
+
+	print("============ CORRECTION ROUTE ==============")
+	subprocess.Popen(["route", "add", "default", "dev", "ppp0"]) # Corrige la 4G au demarrage du raspberry
+
+
+	print("============ CONNEXION ==============")
+	server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+	server.connect((IP_PC, PORT))
+
+	f = open(nomFichier, "rb")
+
+
+	print("======== CALCUL TAILLE ========")
+	taille = os.path.getsize(nomFichier)
+
+
+	print("============ ENVOI FICHIER ==============")
+	totalEnvoyee = 0
+
+	with open(nomFichier, "rb") as f:
+		totalEnvoyee += server.sendfile(f, 0)
+		print("    => chunk %d/%d" % (totalEnvoyee, taille))
+		log.write("    => chunk "+str(totalEnvoyee)+"/"+str(taille)+"\n")
+
+	server.close()
+except KeyboardInterrupt :
+	print("============= LIBERATION =============")
+	os.remove(".lockprocess")
+
+	print("============ WVDIAL ARRET ==============")
+	subprocess.Popen(["kill", "-1", pid.pid])
+
+
+except Exception as ex:
+	print("Exception, voir log")
+	log.write(str(datetime.now())+" => Exception "+str(type(ex))+" ("+str(ex.args)+")\n")
+	time.sleep(1)
+	print("============= LIBERATION =============")
+	os.remove(".lockprocess")
+
+	print("============ WVDIAL ARRET ==============")
+	subprocess.Popen(["kill", "-1", pid.pid])
+
+
+print("================ FIN =================")
+if f is not None:
+	f.close()
+	server.close()
+
+log.close()
+
+if check_pid(pid.pid):
+	print("============ WVDIAL ARRET ==============")
+	subprocess.Popen(["kill", "-1", str(pid.pid)])
+
+time.sleep(1)
+if os.path.isfile("./.lockprocess"):
+	print("=========== LIBERATION ============")
+	os.remove(".lockprocess")
diff --git a/Raspberry/Module_4G/server.py b/Raspberry/Module_4G/server.py
index 3bb7154b9fb3042c7ee09c064de6879e00d50d51..1e93d9b218cbd3bba4eb6908da46a0645d81ef09 100644
--- a/Raspberry/Module_4G/server.py
+++ b/Raspberry/Module_4G/server.py
@@ -1,9 +1,11 @@
 # PYTHON 3.5+
 import socket
 import sys
+import time
 from datetime import datetime
 
 CHUNK_SIZE = 2048
+PORT = 12345
 log = open("log.txt", "w")
 file = None
 
@@ -11,7 +13,7 @@ while True:
 	try:
 		print("Attente Client")
 		server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-		server.bind(("", 12345))
+		server.bind(("", PORT))
 		server.listen(10)
 
 		client, addr = server.accept()
@@ -31,6 +33,8 @@ while True:
 				file.close()
 				client.close()
 				server.close()
+
+				time.sleep(1) # Laisse le temps au port de se liberer
 				break
 			print("  -> chunk")