socket
server:
__author__ = 'zhengjun' import socket,os,hashlib server = socket.socket() server.bind(("localhost",9999)) server.listen(1) while True: conn,addr = server.accept() print("new conn:",addr) while True: print("等待新指令") date = conn.recv(1024) if not date: print("client is missing") break cmd,filename = date.decode().split() print(filename) if os.path.isfile(filename): f = open(filename,"rb") m = hashlib.md5() file_size = os.stat(filename).st_size conn.send( str(file_size).encode() ) #sent file size conn.recv(1024) #wait for ack for line in f: m.update(line) conn.send(line) print("file md5:",m.hexdigest()) f.close() conn.send(m.hexdigest().encode())#send md5 print(m.hexdigest()) server.close()
client:
__author__ = 'zhengjun' import socket,hashlib client = socket.socket() client.connect(("localhost",9999)) while True: cmd = input(">>....").strip() if len(cmd) == 0:continue if cmd.startswith("get"): client.send(cmd.encode()) server_response = client.recv(1024) print("server response:",server_response.decode()) file_total_size = int(server_response.decode()) client.send(b"ready to recv file") received_size = 0 filename = cmd.split()[1] f = open(filename + "new" ,"wb") m = hashlib.md5() while received_size < file_total_size: if file_total_size - received_size > 1024: size = 1024 else: size = file_total_size-received_size data = client.recv(size) received_size += len(data) m.update(data) f.write(data) # print("每次一次多少数据",received_size) else: new_file_md5 = m.hexdigest() print("file recv done") f.close() server_file_md5 = client.recv(1024) print("server file md5:",server_file_md5) print("client file md5:",new_file_md5) client.close()