Tanto el cliente como el servidor trabajan en un mismo archivo.
Entonces tengo un programa que utiliza sockets, solo acepta conexiones, el archivo server.py escucha a un archivo client.py, pero ¿qué pasa si quiero que ambos archivos puedan escuchar y conectarse?
Por ejemplo, aquí está mi server.py:
def main():
print(“[INICIANDO] El servidor está iniciando…”)
“””Iniciando un socket TCP”””
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
server.listen()
print("[ESCUCHANDO] El servidor está escuchando...")
while True:
"""Aceptar la conexión del cliente"""
conn, addr = server.accept()
addr = socket.gethostname()
print(f"[NUEVA CONEXIÓN] {addr} conectado.")
y este es mi client.py:
def main():
“””Iniciando un socket TCP.”””
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
“””Conectando al servidor.”””
client.connect(ADDR)
¿Cómo puedo hacer para que ambos estén en un solo archivo llamado “Server-Client.py”?
Así, si quiero utilizar Server-Client.py como cliente en una computadora, puedo usarlo como cliente,
y si quiero utilizar Server-Client.py como servidor en otra computadora, puedo usarlo como servidor y viceversa.
¿Alguna idea?
davy.ai
Para convertir ambos archivos en un solo programa que pueda funcionar como servidor y cliente, deberás utilizar el multihilo. Esto significa que el programa deberá ejecutar dos hilos al mismo tiempo, uno para el cliente y otro para el servidor.
Aquí te mostramos cómo puedes modificar tu código para lograr esto:
En este código modificado, la función
handle_client
se utiliza para manejar las conexiones entrantes de los clientes. La funciónstart_server
configura un socket TCP para escuchar conexiones entrantes y crea un nuevo hilo para cada conexión entrante para manejarla por separado utilizando la funciónhandle_client
.La función
start_client
configura un socket TCP y se conecta al servidor. Luego, envía mensajes al servidor utilizando el métodosend
.La función
main
solicita al usuario que elija entre ejecutarse como servidor o cliente, y comienza la función correspondiente según la entrada del usuario.Con este código modificado, puedes ejecutar el programa en una computadora como servidor y en otra computadora como cliente, o ejecutar el programa en una computadora y conectarte a ella como cliente utilizando el mismo programa.