es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El código no continuará después de salir de un bucle while al recibir datos del cliente.

He creado una configuración de cliente/servidor para la transferencia de información de firma PGP desde el cliente hasta el servidor. El código a continuación muestra parte del código del servidor, donde agrega las firmas recibidas del cliente a un archivo de texto de salida.

Sin embargo, mi código no puede continuar después del segundo bucle while, después de la pausa. Recibe 2 firmas del cliente y muestra correctamente la cadena “test” solo dos veces y agrega ambas cadenas recibidas al archivo de salida, pero el programa no continuará después de la pausa y no imprimirá las otras cadenas “test2” y “test3”.

while True:

# Acepta la conexión entrante, creando el socket utilizado para la transferencia de datos al cliente
conn, addr = server.accept()

print("Conexión realizada con éxito")

directorio = "(Oculto para la pregunta)"

outputFile = open((directorio + "\\firmas.txt"), "w")

while True:
    data = conn.recv(2048)
    if not data: break
    print("test")
    outputFile.write(data.decode()+"\n")
    outputFile.flush()

print("test2")

conn.close()

print("test3")

Siento que me falta algo muy obvio, pero no puedo entender cuál es el problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el código está en un bucle infinito porque el segundo bucle while no se está rompiendo adecuadamente. La única posible razón para esto podría ser que el cliente no está cerrando la conexión adecuadamente después de enviar los datos.

    Una solución podría ser agregar un valor de tiempo de espera al socket y usar el método setsockopt para establecer el valor de tiempo de espera. Esto obligaría al socket a cerrarse después de un período de tiempo determinado, incluso si el cliente no cierra la conexión adecuadamente.

    Otra solución podría ser agregar una instrucción break después de cerrar la conexión, para forzar al código a salir del segundo bucle while y continuar con el flujo del programa.

    También es importante asegurarse de que el cliente cierre adecuadamente la conexión después de enviar los datos, y verificar cualquier error o excepción que pueda estar impidiendo que la conexión se cierre adecuadamente.

Comments are closed.