Bonsoir
J'ai un probleme avec ma fonction d'envoie d'image de mon serveur vers mon client, pour chaque chaque fichier le 1er message est la taille de ce dernier et tres svt sur mon 2e fichier (parfois le 3e parfois jamais) j'ai une erreur de decodage.
Console Client:
La ligne 5 est normal mais pas la 8
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 Connection... Tentative de connection... Connecter path: Serveur/localhost-15555 File: icone_0.ico Taille reçue non decoder: b'00010046' fichier supprimer path: Serveur/localhost-15555 File: icone_1.ico Taille reçue non decoder: b'ABB\xffABB\xff' Exception in thread Thread-1: Traceback (most recent call last): File "C:\Users\arthu\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 914, in _bootstrap_inner self.run() File "C:\Users\arthu\OneDrive\Projet Papa\Client\Client2.0.py", line 371, in run Recv_fichier(s, path, name) File "C:\Users\arthu\OneDrive\Projet Papa\Client\Client2.0.py", line 291, in Recv_fichier tailleImage = int(tailleImage.decode()) #On convertit la taille de l'image en entier (en octets) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte
Console Serveur:
Fonction d'envoie Serveur:
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 En écoute... [+] Nouveau thread pour 127.0.0.1 53024 Connection de 127.0.0.1 53024 En écoute... Requete: __Setup/3/[1, 0, 0, 0, 0, 0] ['[1', ' 0', ' 0', ' 0', ' 0', ' 0]'] [1, 0, 0, 0, 0, 0] path: Icones/Service-1/icone_0.ico Taille, Taille encoder: 00010046 b'00010046' path: Icones/Service-1/icone_1.ico Taille, Taille encoder: 00010046 b'00010046' path: Icones/Service-1/icone_2.ico Taille, Taille encoder: 00010046 b'00010046' path: Icones/Service-1/icone_3.ico Taille, Taille encoder: 00010046 b'00010046' 127.0.0.1 : 53024 S1: Bon S2: Bon S3: Bon S4: Bon Wait_Check: 3 Thread: 4 127.0.0.1 : 53024 S1: Bon S2: Bon S3: Bon S4: Bon Wait_Check: 3 Thread: 4 Client déconnecté...
Fonction reception Client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 def Envoie_Fichier(clientsocket, path): print("path: ",path) fichierImage = open(path, "rb") tailleImage = str(os.path.getsize(path)) #On récupère la taille du fichier image en octets que l'on convertit en chaine de caractères for i in range(8-len(tailleImage)): #On rajoute des 0 devant la taille jusqu'à que la chaine fasse 8 caractères tailleImage = "0"+ tailleImage print(tailleImage, tailleImage.encode()) clientsocket.send(tailleImage.encode()) #On a la taille de l'image, on l'envoie au client clientsocket.send(fichierImage.read()) #On envoit le contenu du fichier
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 def Recv_fichier(s, path, name): print("path: ", path, "File: ", name) tailleImage = s.recv(8) #On récupère les 8 premier octets print(tailleImage) tailleImage = int(tailleImage.decode()) #On convertit la taille de l'image en entier (en octets) contenuTelecharge = 0 #Contenu téléchargé en octets if not os.path.exists(path): os.makedirs(path) print("Chemin creer") if os.path.exists(path + "/" + name) == True: os.remove(path + "/" + name) print("fichier supprimer") fichierImage = open(path + "/" + name,"xb") #Le fichier qui va contenir l'image while contenuTelecharge < tailleImage: #On a la taille de l'image, jusqu'à ce qu'on ait tout téléchargé contenuRecu = s.recv(1024) #On lit les 1024 octets suivant fichierImage.write(contenuRecu) #On enregistre dans le fichier contenuTelecharge += len(contenuRecu) #On ajoute la taille du contenu reçu au contenu téléchargé fichierImage.close()
Partager