Actualizar main.py

This commit is contained in:
Kevin William Olarte Braun 2025-02-19 03:17:21 +00:00
parent 72c85b1ff3
commit 2dac13aec1
1 changed files with 10 additions and 101 deletions

111
main.py
View File

@ -1,101 +1,10 @@
import socket
import threading
import tkinter as tk
from tkinter import scrolledtext
from server import start_server # Importamos la función para iniciar el servidor
# Configuración del cliente
SERVER_HOST = '127.0.0.1'
SERVER_PORT = 3333
class ChatApp:
def __init__(self, root):
self.root = root
self.root.title("Chat Cliente-Servidor")
# Botón para iniciar el servidor
self.server_button = tk.Button(root, text="Iniciar Servidor", command=self.start_server)
self.server_button.grid(row=0, column=0, padx=10, pady=10)
# Botón para conectar el cliente
self.connect_button = tk.Button(root, text="Conectar Cliente", command=self.start_client)
self.connect_button.grid(row=0, column=1, padx=10, pady=10)
# Área de chat
self.chat_display = scrolledtext.ScrolledText(root, wrap=tk.WORD, state='disabled', width=50, height=20)
self.chat_display.grid(row=1, column=0, padx=10, pady=10, columnspan=2)
# Campo de entrada de mensajes
self.message_entry = tk.Entry(root, width=40)
self.message_entry.grid(row=2, column=0, padx=10, pady=10)
# Botón para enviar mensajes
self.send_button = tk.Button(root, text="Enviar", command=self.send_message, state='disabled')
self.send_button.grid(row=2, column=1, padx=10, pady=10)
self.client_socket = None # Se inicializa el socket del cliente en None
self.connected = False # Variable para manejar el estado de conexión
def start_server(self):
""" Inicia el servidor en segundo plano """
threading.Thread(target=start_server, daemon=True).start()
self.append_message("[SERVIDOR] Servidor iniciado en segundo plano...\n")
def start_client(self):
""" Conecta el cliente al servidor """
if self.connected:
self.append_message("[CLIENTE] Ya estás conectado al servidor.\n")
return
# Intentar crear un nuevo socket
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.client_socket.connect((SERVER_HOST, SERVER_PORT))
self.append_message(f"[CONECTADO] Conectado al servidor {SERVER_HOST}:{SERVER_PORT}\n")
threading.Thread(target=self.receive_messages, daemon=True).start()
self.send_button.config(state='normal') # Habilitar botón de enviar mensajes
self.connected = True
except ConnectionRefusedError:
self.append_message("[ERROR] El servidor no está disponible. Inícialo primero.\n")
self.client_socket = None # Restablecer socket para permitir nuevos intentos
except Exception as e:
self.append_message(f"[ERROR] No se pudo conectar al servidor: {e}\n")
self.client_socket = None # Restablecer socket
def receive_messages(self):
""" Recibe mensajes del servidor en un hilo separado """
while True:
try:
message = self.client_socket.recv(1024)
if not message:
break
self.append_message(message.decode('utf-8'))
except:
self.append_message("[ERROR] Conexión perdida con el servidor.\n")
self.client_socket.close()
self.client_socket = None
self.connected = False
self.send_button.config(state='disabled') # Deshabilitar el botón de enviar
break
def send_message(self):
""" Envía un mensaje al servidor """
message = self.message_entry.get()
if message and self.client_socket:
try:
self.client_socket.send(message.encode('utf-8'))
self.message_entry.delete(0, tk.END)
except:
self.append_message("[ERROR] No se pudo enviar el mensaje.\n")
def append_message(self, message):
""" Agrega un mensaje a la ventana de chat """
self.chat_display.config(state='normal')
self.chat_display.insert(tk.END, message + '\n')
self.chat_display.config(state='disabled')
self.chat_display.yview(tk.END)
if __name__ == "__main__":
root = tk.Tk()
app = ChatApp(root)
root.mainloop()
import tkinter as tk
from Vista import VistaChat
from Controlador import ControladorChat
if __name__ == "__main__":
root = tk.Tk()
controlador = ControladorChat(None)
vista = VistaChat(root, controlador)
controlador.vista = vista # Se establece la referencia circular
root.mainloop()