Página 1 de 1

Chat básico

Publicado: 18 Mar 2023, 08:51
por Flight embedded
Comparto el código fuente de un chat básico. Lo compilé con python3 en Kalilinux. Funciona perfectamente.

Servidor:

Código: Seleccionar todo

import socket import threading class Servidor: def __init__(self, host, port): self.host = host self.port = port self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.bind((self.host, self.port)) self.sock.listen(5) self.clientes = def broadcast(self, mensaje, cliente): for c in self.clientes: if c != cliente: c.enviar(mensaje) def manejar_cliente(self, cliente): while True: try: mensaje = cliente.recibir() self.broadcast(mensaje, cliente) except: self.eliminar_cliente(cliente) break def eliminar_cliente(self, cliente): if cliente in self.clientes: self.clientes.remove(cliente) def manejar_conexiones(self): while True: cliente, direccion = self.sock.accept() nuevo_cliente = Cliente(cliente, direccion) self.clientes.append(nuevo_cliente) threading.Thread(target=self.manejar_cliente, args=(nuevo_cliente,)).start() class Cliente: def __init__(self, sock, direccion): self.sock = sock self.direccion = direccion def recibir(self): return self.sock.recv(1024).decode('utf-8') def enviar(self, mensaje): self.sock.send(mensaje.encode('utf-8')) if __name__ == '__main__': servidor = Servidor('127.0.0.1', 8080) servidor.manejar_conexiones() 

Cliente:

Código: Seleccionar todo

import socket import threading class Cliente: def __init__(self, host, port): self.host = host self.port = port self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.host, self.port)) self.nombre_usuario = input("Ingrese su nombre de usuario: ") def recibir(self): return self.sock.recv(1024).decode('utf-8') def enviar(self, mensaje): self.sock.send(mensaje.encode('utf-8')) def manejar_entrada(self): while True: mensaje = input('') self.enviar(f'{self.nombre_usuario}: {mensaje}') def manejar_salida(self): while True: mensaje = self.recibir() print(mensaje) if __name__ == '__main__': cliente = Cliente('127.0.0.1', 8080) threading.Thread(target=cliente.manejar_entrada).start() threading.Thread(target=cliente.manejar_salida).start() 

Fuente:

Henry Gaddiel Hernandez Cortes

Publicado: 19 Mar 2023, 01:10
por Bl4ckV
Se agradece el aporte