envío múltiple desde el servidor al cliente python

Primero, estoy enviando el archivo solicitado del servidor al cliente y luego deseo enviar el sha calculado del archivo desde el servidor al cliente, para que el cliente pueda verificar si tanto el sha del archivo enviado como el recibido. son lo mismo.

Me las arreglo para enviar el archivo, pero cuando trato de enviar también el sha (que es una variable) recibo un error (creo que el sha también se agrega al contenido del archivo)

¿Cómo puedo enviarlos por separado?

if (reqCommand == 'get'): with open (reqFile, 'rb') as in_file, open(encFile, "wb") as out_file: encrypt(in_file, out_file, "abc") f = open(encFile,'rb') for data in f: # print 'here3' conn.sendall(data) f.close() file_sh = hashfile(reqFile) print 'the sha1 function from the server: ', file_sh conn.send(file_sh) 

y el cliente:

 while True: data = sock.recv(1024) if not data: break #print data file_to_write.write(data) 

Debes rediseñar un poco cómo funciona tu aplicación:

  • Primero los servidores envían al cliente el tamaño del archivo.
  • El cliente lee el tamaño del archivo (lo convierte en un número) y notifica al servidor (envía “OK” al servidor, por ejemplo).
  • El servidor lee el “OK” del cliente y comienza a enviar el contenido del archivo (preferiblemente en trozos más pequeños).
  • El cliente sigue leyendo datos hasta que lee exactamente bytes de file size o se produce un error.
  • Si no se produce ningún error, el cliente calcula el hash del archivo que acaba de recibir y lo envía al servidor.
  • El servidor lee el hash del cliente y lo compara con el de su archivo local; si coinciden, envía “OK” al cliente “ERROR” de lo contrario.
  • El cliente lee la respuesta del servidor: si se recibe “ERROR”, se elimina el archivo.

Una secuencia TCP debe formatearse en ambos extremos, ya que se trata de una secuencia y no de paquetes. Supongo que podría buscar un nullbyte ( '\x00' ) que debería indicar el final del archivo.