python学习:socket
客户端
#!/usr/bin/env python #coding:utf-8 import socket,os,hashlib client=socket.socket() client.connect(('localhost',6969)) while True: cmd=input('>>:').strip() if cmd.startswith('get'): client.send(cmd.encode('utf-8')) server_response=client.recv(1024) client.send(b'ready...') file_total_size=int(server_response) revice_size=0 filename=cmd.split()[1] f=open(filename+'.new','wb') m=hashlib.md5() while revice_size < file_total_size: if file_total_size-revice_size>1024: size=1024 else: size=file_total_size-revice_size data=client.recv(size) f.write(data) revice_size+=len(data) m.update(data) #print(file_total_size,revice_size) else: print('done...') new_file_md5=m.hexdigest() f.close() #client.send(b'wait...') old_file_md5=client.recv(1024).decode() print('源文件:'+old_file_md5,'新文件:'+new_file_md5) client.close()
服务端:
#!/usr/bin/env python #coding:utf-8 import socket,os,hashlib server=socket.socket() server.bind(('localhost',6969)) server.listen(4) print('监听中...') while True: conn,addr=server.accept() # print(conn,addr) print('数据来了...') while True: data=conn.recv(1024) if not data: print('丢失连接') break cmd,filename=data.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('utf-8')) conn.recv(1024) for line in f: m.update(line) conn.send(line) #发送md5 #conn.recv(1024) conn.send(m.hexdigest().encode()) f.close() server.close()