server
#-*- coding:utf-8 -*- import os,socket #获取dir/ipconfig 等指令,读取的数据 def sendCmdData(conn,cmd): res = os.popen(cmd).read() print(res) # 先发送指令值的长度 conn.send(str(len(res.encode())).encode()) conn.recv(1) conn.send(res.encode()) #执行指令操作WIN def cmd_exec(conn,cmd,filename): if cmd==('md' or 'MD'): #1.显示当前目录 sendCmdData(conn, 'dir') #2创建自己的目录 os.mkdir(filename) conn.recv(1)#解决传输过程中数据粘合问题 sendCmdData(conn, 'dir') elif cmd==('cd' or 'CD'): sendCmdData(conn, 'dir') # 2进入自己的目录 os.chdir(filename) conn.recv(1)#解决传输过程中数据粘合问题 sendCmdData(conn, 'dir') else: sendCmdData(conn, cmd) #解析指令 def get_cmd_str(conn,data): #cmd_str=data[0],data[1]=filename #str处理取出cmd,filename cmd_data=data.split(',') if cmd_data[0]=='1': #cmd,cmd_name cmd_exec(conn,cmd_data[1],cmd_data[2]) elif cmd_data[0]=='2': #下载 filename print(cmd_data[2]) print(os.getcwd()) filename = cmd_data[2] if os.path.isfile(filename): get_file = open(filename, 'rb') file_size = os.stat(filename).st_size print(filename,file_size) conn.send(str(file_size).encode('utf-8')) res_size=conn.recv(1024).decode() print('client传过来的大小:',res_size) #发送文件数据 for line in get_file: print(line) conn.send(line) # print('md5:',m.hexdigest()) get_file.close() else: pass elif cmd_data[0]=='3': #上传 filename print(cmd_data[2]) #put(conn, cmd_data[2]) else: print('指令错误') print(os.getcwd()) server=socket.socket() server_name=input('请输入服务器ip,服务器端口位8888 >>:').strip() server.bind((server_name,8888)) server.listen(5) while True: print('等待客户端连接。。。') conn,addr=server.accept() print(addr,'已经连接成功。。。') while True: # 接收指令 cmd_str=conn.recv(1024) cmd_str_decode=cmd_str.decode() print(cmd_str_decode) if cmd_str_decode=='Q': break # 对指令进行解析 get_cmd_str(conn,cmd_str_decode) print(os.getcwd()) #conn.send(b'server-response') server.close()
client
#-*- coding:utf-8 -*- import os,socket def help(): print('输入get/cmd+,+/上传(u)/下载(d)+,+文件名/路径+文件') print('1.输入get dir filename=>上传文件到服务器指定的文件夹') print('2.输入put dir filename=>下载文件到本机指定的文件夹') print('3.输入cmd 指令名称 data=>执行并显示指令返回值') print('4.输入Q退出') print('5.输入H=>显示帮助信息') print(''' x代表任意字母或数字 dir x x 显示client 的当前目录 cd cmd cd d 进入当前目录下的dd文件夹 cmd cd .. 返回上级目录 cmd dir x 显示当前目录 cmd md aa 在当前目录下建立aa文件夹 ''') get_input_data() def get_input_data(): while True: str = input('按"H"显示帮助信息>>:').strip() if str == 'Q': return 1 elif str == 'H': help() elif str.count(' ') == 2: cmd, dirname, filename = str.split(' ') if cmd == 'get': str = '2,' + dirname + ',' + filename elif cmd == 'put': str = '3,' + dirname + ',' + filename elif cmd == 'cmd': str = '1,' + dirname + ',' + filename elif cmd=='dir': print(os.getcwd()) print('客户端>>:',os.popen('dir').read()) continue elif cmd=='cd': print(os.getcwd()) if os.path.isdir(dirname): os.chdir(dirname) print('客户端>>:',os.popen('dir').read()) continue elif cmd=='md': print(os.getcwd()) os.mkdir(dirname) if os.path.isdir(dirname): os.chdir(dirname) print('客户端>>:',os.popen('dir').read()) continue else: print('输入格式不正确,正确格式:输入get/put/cmd 目录 文件名') continue return str else: print('输入格式不正确,正确格式:输入get/put/cmd 目录 文件名') continue def get_cmd_str(client,data): #cmd_str=data[0],data[1]=filename #str处理取出cmd,filename cmd_data=data.split(',') print(cmd_data) if cmd_data[0]=='1': #cmd,cmd_nameclient cmd_exec(client, cmd_data[1],cmd_data[2]) elif cmd_data[0]=='2': #下载 filename print(cmd_data[2]) print(os.getcwd()) filename = cmd_data[2] #创建文件 f = open(filename, 'wb') #1. 接收文件大小 file_size=client.recv(1024).decode() print(file_size) #给服务器一个相应,已经收到大小数据 client.send(file_size.encode('utf-8')) res_size = 0 while res_size < int(file_size): f_data = client.recv(1024) res_size += len(f_data) f.write(f_data) print(file_size, res_size) else: print('文件接收完成') f.close() elif cmd_data[0]=='3': #上传 filename print(cmd_data) #put(client, cmd_data[2]) else: print('指令错误') def cmd_exec(client,cmd,filename): if cmd==('md' or 'MD'): recCmdData(client, cmd) client.send(b'1')#解决传输过程中数据粘合问题 recCmdData(client, cmd) elif cmd==('cd' or 'CD'): recCmdData(client, cmd) client.send(b'1')#解决传输过程中数据粘合问题 recCmdData(client, cmd) else: #接收数据的长度 recCmdData(client, cmd) def recCmdData(client,cmd): # 接收数据的长度 data_all_size = int(client.recv(1024).decode()) print(data_all_size) client.send(b'1') res_size = 0 while res_size < data_all_size: data = client.recv(1024) res_size += len(data) print(data.decode()) print('服务器端信息>>:',data_all_size, res_size) print(os.getcwd()) client=socket.socket() server_name=input('请输入服务器ip,服务器端口位8888 >>:').strip() client.connect((server_name,8888)) while True: str=get_input_data() if str==1: client.send('Q'.encode('utf-8')) break else: print(str) get_dir=str.split(',')[1] print(get_dir) client.send(str.encode('utf-8')) get_cmd_str(client, str) print('客户端>>:',os.getcwd()) #验证输入 # print(cmd.find('get',0,3)) client.close()