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:
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
La ligne 5 est normal mais pas la 8

Console 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 d'envoie Serveur:
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
Fonction reception Client:
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()