一. server #-*- coding:utf-8 -*- import os,socket import hashlib #创建server的socket对象 server=socket.socket() server_name=input('请输入服务器地址(ip地址):').strip() #port_name=int(input('请输入服务器端口,通用端口为8888:').strip()) #绑定服务器地址和端口 server.bind((server_name,8888)) #监听 server.listen(5) while True: #获取client对象 conn和IP地址 print('等待接入。。。。') conn,addr=server.accept() print(str(addr),'已经连接。。。') while True: #接收client端信息 data=conn.recv(1024) if not data: print('客户端没有数据传过来') break cmd,filename=data.decode().split()#用空格区分进行分割cmd和filename print(cmd,filename) #os.chdir(r'c:\py') #确认文件目录 #判断文件及文件夹是否存在 if os.path.isfile(filename): #存在,就打开文件,用byte流读取 get_file=open(filename,'rb') #获取文件的大小 file_size=os.stat(filename).st_size #先发送文件大小给client conn.send(str(file_size).encode('utf-8')) #获取客户端确认 #res=conn.recv(10) #获取md5加密对象 m = hashlib.md5() #发送文件 for line in get_file: #m.update(line) conn.send(line) #print('md5:',m.hexdigest()) get_file.close() else: conn.send('0'.encode('utf-8')) print('send done') server.close() 二.client#-*- coding:utf-8 -*- import os,socket import hashlib #创建server的socket对象 client=socket.socket() server_name=input('请输入连接服务器地址(ip地址):').strip() #port_name=int(input('请输入服务器端口,通用端口为8888:').strip()) #连接服务器 client.connect((server_name,8888)) while True: #输入指令 cmd_str=input('请输入get filename,输入Q退出:').strip().encode('utf-8') if not cmd_str: continue elif cmd_str==b'Q': print('退出') break else: #发送指令 client.send(cmd_str) #接收服务器的指令信息 file_size = client.recv(1024).decode() if file_size =='0' : print('没有这个文件或文件为空!') continue # else: # client.send(b'start') #client端确认允许传文件 print('文件大小:'+file_size) file_name= cmd_str.split()[1] print(file_name) os.chdir(r'd:\py') f=open(file_name,'wb') res_size = 0 while res_size<int(file_size): data=client.recv(1024) res_size+=len(data) f.write(data) print(file_size,res_size) else: print('文件接收完成') f.close() client.close()
python socket 文件传输
最新推荐文章于 2023-12-28 16:20:43 发布