Je me présente : j'ai 14 ans et je suis passionné d'informatique. Bémol, je ne suis pas le meilleur dans ce domaine. J'ai deux programmes qui ne marchent pas très bien ensemble et je n'arrive pas à les corriger. Je pense que ce post n'est pas fait pour les débutants, sachant que cela doit être assez complexe. Après, c'est peut-être juste moi qui ne suis pas très bon. Voici mes deux programmes, j'ai mis des explications pour que vous compreniez.

code 1 : le 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
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
from tkinter import *
import socket
import os
from tkinter import filedialog, messagebox
 
def envoyer_donnees(identifiant, mot_de_passe):
    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.connect(('localhost', 9999))  # Remplacez par l'adresse de votre serveur
            s.sendall(f"{identifiant}:{mot_de_passe}".encode('utf-8'))
            reponse = s.recv(1024).decode('utf-8')
            afficher_reponse(reponse)
            if reponse.lower() == "oui":
                ouvrir_fenetre_option()
    except Exception as e:
        print(f"Erreur de connexion: {e}")
 
def afficher_reponse(reponse):
    label_reponse.config(text=reponse)
 
def collect_credentials():
    identifiant = entry_identifiant.get()
    mot_de_passe = entry_mot_de_passe.get()
    envoyer_donnees(identifiant, mot_de_passe)
 
def ouvrir_fenetre_option():
    fenetre_option = Toplevel(window)
    fenetre_option.title("Options")
    fenetre_option.geometry("300x200")
 
    label_option = Label(fenetre_option, text="Choisissez une option:", font=("Arial", 12))
    label_option.pack(pady=10)
 
    bouton_telecharger = Button(fenetre_option, text="Télécharger un fichier", command=telecharger_fichier)
    bouton_telecharger.pack(pady=5)
 
    bouton_envoyer = Button(fenetre_option, text="Envoyer un fichier", command=envoyer_fichier)
    bouton_envoyer.pack(pady=5)
 
def telecharger_fichier():
    nom_fichier = entry_nom_fichier.get()
    # Logique pour télécharger le fichier depuis le serveur
    # Exemple: envoyer une requête au serveur pour télécharger le fichier
    # Enregistrer le fichier sur le bureau
    chemin_fichier = os.path.join(os.path.expanduser("~"), "Desktop", nom_fichier)
    # Code pour recevoir le fichier et l'enregistrer
    messagebox.showinfo("Téléchargement", f"Fichier {nom_fichier} téléchargé sur le bureau.")
 
def envoyer_fichier():
    fichier = filedialog.askopenfilename()
    if fichier:
        # Logique pour envoyer le fichier au serveur
        # Exemple: envoyer "upload" au serveur et le fichier
        messagebox.showinfo("Envoi", f"Fichier {os.path.basename(fichier)} envoyé au serveur.")
 
# Création de la fenêtre principale
window = Tk()
window.title("Opera Server")
window.geometry("600x300")
window.minsize(600, 200)
window.iconbitmap("icone.ico")
window.config(background='Black')
 
# Ajout d'un label de bienvenue
texte = Label(window, text='Bienvenue Sur Opera Server', font=('Arial', 20), bg='Black', fg='Red', border='3')
texte.place(x=10, y=10)
 
# Champ pour l'identifiant
label_identifiant = Label(window, text="Identifiant:", font=("Arial", 12), bg='Black', fg='White')
label_identifiant.place(x=10, y=60)
entry_identifiant = Entry(window, font=("Arial", 12))
entry_identifiant.place(x=150, y=60)
 
# Champ pour le mot de passe
label_mot_de_passe = Label(window, text="Mot de passe:", font=("Arial", 12), bg='Black', fg='White')
label_mot_de_passe.place(x=10, y=100)
entry_mot_de_passe = Entry(window, font=("Arial", 12), show='*')
entry_mot_de_passe.place(x=150, y=100)
 
# Label pour afficher la réponse du serveur
label_reponse = Label(window, text="", font=("Arial", 12), bg='Black', fg='White')
label_reponse.place(x=10, y=180)
 
# Champ pour le nom du fichier à télécharger
label_nom_fichier = Label(window, text="Nom du fichier à télécharger:", font=("Arial", 12), bg='Black', fg='White')
label_nom_fichier.place(x=10, y=220)
entry_nom_fichier = Entry(window, font=("Arial", 12))
entry_nom_fichier.place(x=250, y=220)
 
# Bouton pour envoyer les informations
bouton_envoyer = Button(window, text="Envoyer", font=("Arial", 10), bg='Black', fg='Red', border='10', command=collect_credentials)
bouton_envoyer.place(x=150, y=140)
 
# Lancement de la boucle principale
window.mainloop()

Code 2 : le 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
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
import socket
import os
import csv
 
def verifier_identifiants(identifiant, mot_de_passe):
    document_path = "base.csv"
 
    if not os.path.exists(document_path):
        print(f"Document {document_path} n'existe pas.")
        return "non"
 
    with open(document_path, mode='r') as file:
        reader = csv.reader(file)
        for row in reader:
            if len(row) < 2:
                continue
            cell_a, cell_b = row
            if cell_a == identifiant:
                return "oui" if cell_b == mot_de_passe else "non"
    return "non"
 
def gerer_dossier(client_socket, identifiant):
    dossier_path = f"./{identifiant}"
 
    if not os.path.exists(dossier_path):
        os.makedirs(dossier_path)
 
    fichiers = os.listdir(dossier_path)
    client_socket.send(f"Fichiers disponibles : {', '.join(fichiers)}".encode())
 
    while True:
        try:
            action = client_socket.recv(1024).decode()
        except ConnectionResetError:
            print("Client has disconnected.")
            break  # Exit the loop if the client disconnects
 
        if action.startswith("upload:"):
            nom_fichier = action.split(":")[1]
            with open(os.path.join(dossier_path, nom_fichier), 'wb') as f:
                fichier_data = client_socket.recv(1024)
                f.write(fichier_data)
            client_socket.send("Fichier téléchargé avec succès.".encode())
 
        elif action.startswith("download:"):
            nom_fichier = action.split(":")[1]
            chemin_fichier = os.path.join(dossier_path, nom_fichier)
            if os.path.exists(chemin_fichier):
                with open(chemin_fichier, 'rb') as f:
                    client_socket.send(f.read())
                client_socket.send("Téléchargement terminé.".encode())
            else:
                client_socket.send("Fichier non trouvé.".encode())
 
 
 
 
def serveur():
    serveur_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serveur_socket.bind(('localhost', 9999))
    serveur_socket.listen(5)
    print("Serveur en attente de connexions...")
 
    while True:
        client_socket, adresse = serveur_socket.accept()
        print(f"Connexion de {adresse}")
        donnees = client_socket.recv(1024).decode()
 
        try:
            identifiant, mot_de_passe = donnees.split(':')
        except ValueError:
            print("Données reçues malformées, format attendu : 'identifiant:mot_de_passe'")
            client_socket.send("non".encode())
            client_socket.close()
            continue
 
        reponse = verifier_identifiants(identifiant, mot_de_passe)
        client_socket.send(reponse.encode())
 
        if reponse == "oui":
            gerer_dossier(client_socket, identifiant)
 
        client_socket.close()
 
if __name__ == "__main__":
    serveur()

J'espere avoir des reponses parce que la je suis perduuuuuuuuuuu. Merci , bonne journée