多次从服务器发送到客户端 python
multiple send from server to client python
首先,我将请求的文件从服务器发送到客户端,然后我想将文件的计算 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)
您应该稍微重新设计一下您的应用程序的工作方式:
- 首先服务器向客户端发送文件大小
- 客户端读取文件大小(将其转换为数字)并通知服务器(例如向服务器发送“OK”)
- 服务器从客户端读取“OK”并开始发送文件内容(最好是较小的块)
- 客户端一直读取数据,直到它读取到准确的“文件大小”字节或发生错误
- 如果没有发生错误,客户端计算它刚刚收到的文件的哈希值并将其发送到服务器
- 服务器从客户端读取散列并与它的本地文件之一进行比较 - 如果它们匹配,则向客户端发送“OK”“ERROR ”否则
- 客户端从服务器读取响应:如果收到“ERROR”,则文件被删除
TCP 流需要在两端进行格式化,因为它是流而不是数据包。我想你可以寻找一个空字节('\x00'
),它应该表示文件结束。
首先,我将请求的文件从服务器发送到客户端,然后我想将文件的计算 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)
您应该稍微重新设计一下您的应用程序的工作方式:
- 首先服务器向客户端发送文件大小
- 客户端读取文件大小(将其转换为数字)并通知服务器(例如向服务器发送“OK”)
- 服务器从客户端读取“OK”并开始发送文件内容(最好是较小的块)
- 客户端一直读取数据,直到它读取到准确的“文件大小”字节或发生错误
- 如果没有发生错误,客户端计算它刚刚收到的文件的哈希值并将其发送到服务器
- 服务器从客户端读取散列并与它的本地文件之一进行比较 - 如果它们匹配,则向客户端发送“OK”“ERROR ”否则
- 客户端从服务器读取响应:如果收到“ERROR”,则文件被删除
TCP 流需要在两端进行格式化,因为它是流而不是数据包。我想你可以寻找一个空字节('\x00'
),它应该表示文件结束。