多个从服务器发送到客户端python

时间:2015-06-03 08:51:18

标签: python file client server sha

首先我将请求的文件从服务器发送到客户端,之后我想将文件的计算sha从服务器发送到客户端,以便客户端可以检查发送的是否和收到的文件是一样的。

我设法发送文件但是当我尝试发送sha(这是一个变量)时我收到一个错误(我相信sha也被添加到文件内容中)

我如何单独发送?

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)

和客户:

while True:
    data = sock.recv(1024)

    if not data:
        break
    #print data
    file_to_write.write(data)

2 个答案:

答案 0 :(得分:1)

你应该重新设计你的应用程序的工作方式:

  • 首先,服务器向客户端发送文件大小。
  • 客户端读取文件大小(将其转换为数字)并通知服务器(例如,向服务器发送“OK”)。
  • 服务器从客户端读取“OK”并开始发送文件内容(最好以较小的块)。
  • 客户端不断读取数据,直到它准确读取file size字节或发生错误。
  • 如果没有发生错误,客户端会计算刚收到的文件的哈希值并将其发送到服务器。
  • 服务器从客户端读取哈希并与其本地文件进行比较;如果匹配,则向客户端发送“OK”,否则发送“ERROR”。
  • 客户端从服务器读取响应:如果收到“ERROR”,则删除该文件。

答案 1 :(得分:0)

TCP流需要在两端进行格式化,因为它是流而不是数据包。我想你可以寻找一个nullbyte('\x00'),它应该发出文件结束信号。