一. 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()