socket.send trabajando solo una vez en el código de Python para un cliente de eco

Tengo el siguiente código para un cliente de eco que envía datos a un servidor de eco mediante una conexión de socket:

echo_client.py

import socket host = '192.168.2.2' port = 50000 size = 1024 def get_command(): #..Code for this here s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host,port)) while 1: msg = get_command() if msg == 'turn on': s.send('Y') elif msg == 'turn off': s.send('N') elif msg == 'bye bye': break else: s.send('X') data = s.recv(size) print 'Received: ',data s.close() 

echo_server.py

 import socket host = '' port = 50000 backlog = 5 size = 1024 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host,port)) s.listen(backlog) while 1: client, address = s.accept() data = client.recv(size) if data: client.send(data) client.close() 

El problema al que me estoy enfrentando es que en el cliente s.send funciona solo la primera vez, a pesar de que está en un bucle infinito. El cliente se bloquea con el tiempo de espera de conexión, algún tiempo después de que se haya completado el primer envío / recepción .

¿Por qué está trabajando solo una vez? ¿Cómo puedo solucionar esto en mi código?

Por favor ayuda gracias

Su código de servidor solo llama a recv una vez. Debería llamar a accept una vez si solo desea recibir una conexión, pero luego debe realizar un bucle de llamada a recv y send .

Su problema es que está bloqueando la accept dentro del bucle del servidor.

Esto espera que el servidor acepte conexiones de más de un cliente. Si desea eso, y para que cada cliente envíe varios comandos, deberá generar un nuevo hilo (o proceso) después de la aceptación, con un nuevo bucle while (para la comunicación del cliente) en ese hilo / proceso.

Para corregir su ejemplo para que funcione con un solo cliente, debe mover la aceptación fuera del bucle, así:

 client, address = s.accept() while 1: data = client.recv(size) if data: client.send(data)