From 18d9dc1f44b7025351a810f9169978ec3d87ae9b Mon Sep 17 00:00:00 2001 From: OUDJOUDI Mazis <mazis.oudjoudi9@etu.univ-lorraine.fr> Date: Mon, 29 Apr 2024 21:43:44 +0000 Subject: [PATCH] Upload New File --- client.py | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 client.py diff --git a/client.py b/client.py new file mode 100644 index 0000000..eb7ff17 --- /dev/null +++ b/client.py @@ -0,0 +1,123 @@ +import socket +import threading +import tkinter as tk +from tkinter import messagebox + +def receive_messages(): + while True: + try: + message = client_socket.recv(1024).decode() + if message.startswith('[CONNEXION]'): + user = message.split(':')[1] + users_connected.append(user) + update_users_list() + communication_box.insert(tk.END, f"[{user}]: {user} vient d'arriver sur le chat\n") + elif message.startswith('[DECONNEXION]'): + user = message.split(':')[1] + users_connected.remove(user) + update_users_list() + else: + message_parts = message.split(':', 1) # Diviser en deux parties au maximum + if len(message_parts) == 2: + user, msg = message_parts + communication_box.insert(tk.END, f"[{user}]: {msg}\n") + else: + # Le message n'est pas au bon format + print("Le message reçu n'est pas au bon format :", message) + except ConnectionResetError: + messagebox.showinfo("Information", "Connexion au serveur perdue.") + break + +def send_message(event=None): + message = message_entry.get() + message = f"[{username}]: {message}" + client_socket.send(message.encode()) + message_entry.delete(0, tk.END) + if message == '[QUIT]': + client_socket.close() + root.quit() + +def disconnect(): + client_socket.send('[QUIT]'.encode()) + +def connect_to_server(): + global client_socket, username + server_ip = server_ip_entry.get() + server_port = int(server_port_entry.get()) + username = username_entry.get() + + try: + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client_socket.connect((server_ip, server_port)) + client_socket.send(username.encode()) + send_button.focus_set() + receive_thread = threading.Thread(target=receive_messages) + receive_thread.start() + communication_box.insert(tk.END, f"[{username}]: Vous êtes connecté au chat\n") + except ConnectionRefusedError: + messagebox.showinfo("Information", "Impossible de se connecter au serveur. Vérifiez l'adresse IP et le port.") + +def on_closing(): + if messagebox.askokcancel("Quitter", "Êtes-vous sûr de vouloir quitter ?"): + disconnect() + root.destroy() + broadcast_message(f"[DECONNEXION]:{username}") + +def update_users_list(): + users_list.delete(0, tk.END) + for user in users_connected: + users_list.insert(tk.END, user) + +root = tk.Tk() +root.title("Client") +root.protocol("WM_DELETE_WINDOW", on_closing) + +connection_frame = tk.Frame(root) +connection_frame.pack(padx=10, pady=10) + +server_ip_label = tk.Label(connection_frame, text="Adresse IP du serveur:") +server_ip_label.grid(row=0, column=0, sticky=tk.W) +server_ip_entry = tk.Entry(connection_frame) +server_ip_entry.grid(row=0, column=1, padx=5) + +server_port_label = tk.Label(connection_frame, text="Port du serveur:") +server_port_label.grid(row=1, column=0, sticky=tk.W) +server_port_entry = tk.Entry(connection_frame) +server_port_entry.grid(row=1, column=1, padx=5) + +username_label = tk.Label(connection_frame, text="Nom d'utilisateur:") +username_label.grid(row=2, column=0, sticky=tk.W) +username_entry = tk.Entry(connection_frame) +username_entry.grid(row=2, column=1, padx=5) + +connect_button = tk.Button(connection_frame, text="Se connecter", command=connect_to_server) +connect_button.grid(row=3, column=0, pady=10) + +disconnect_button = tk.Button(connection_frame, text="Déconnecter", command=on_closing) +disconnect_button.grid(row=3, column=1, pady=10) + +communication_frame = tk.Frame(root) +communication_frame.pack(padx=10, pady=10) + +communication_label = tk.Label(communication_frame, text="Communication:") +communication_label.pack() + +communication_box = tk.Text(communication_frame, height=10, width=50) +communication_box.pack() + +message_entry = tk.Entry(root, width=40) +message_entry.pack(padx=10, pady=5) + +send_button = tk.Button(root, text="Envoyer", command=send_message) +send_button.pack(padx=10, pady=5) + +users_frame = tk.Frame(root) +users_frame.pack(padx=10, pady=10) + +users_label = tk.Label(users_frame, text="Utilisateurs connectés:") +users_label.pack() + +users_list = tk.Listbox(users_frame, height=5, width=30) +users_list.pack() + +root.mainloop() \ No newline at end of file -- GitLab