Exemple #1
0
 def my_put(self, arg):
     print('put...', arg)
     # 默认传home文件夹中的文件 —— “模拟本地”
     filepath = os.path.join(HOME_PATH, arg)
     if os.path.isfile(filepath) and os.path.exists(filepath):
         filename = os.path.basename(filepath)
         file_size = os.path.getsize(filepath)
         file_md5 = get_file_md5(filepath)
         dic = {
             'file_exists': True,
             'filename': filename,
             'file_size': file_size,
             'file_md5': file_md5
         }
         # 将字典传给server——用协议 因为接着后面会传文件!
         pro_send(self.sk, dic)
         # 开始传文件 —— file_size参数是为了打印进度条的
         file_send(self.sk, filepath)
         # 不用协议 收结果  dic = {'ret':False}
         ret = pro_recv(self.sk, False)
         if not ret['ret']:
             print_error('文件传输的过程有损坏!')
         else:
             print_correct('文件传输完成,经校验无误!')
     else:
         print_error('你的home文件夹中没有这个文件!')
         # 注意 由于arg参数已经传给server了,因此把错误的信息还得发给server,让那边做判断
         dic = {'file_exists': False}
         # 将字典传给server——用协议
         pro_send(self.sk, dic)
Exemple #2
0
 def my_del(self, arg):
     print('del...', arg)
     # 接收server端返回的字典 不用协议
     dic = pro_recv(self.sk, False)  #dic = {'ret':False,'msg':None}
     if not dic['ret']:
         print_error(dic['msg'])
     else:
         print_correct('成功删除 %s' % arg)
Exemple #3
0
 def my_mkdir(self, arg):
     # print('mkdir...',arg)
     # 接收结果字典 dic = {'ret':False,'msg':None}
     dic = pro_recv(self.sk, False)
     if not dic['ret']:
         print_error(dic['msg'])
     else:
         print_correct('创建目录成功!')
Exemple #4
0
 def my_pwd(self):
     # print('pwd...')
     dic = {'opt': 'pwd', 'arg': ''}
     # 直接发给server, server做反射时不用协议接收 这里也不用协议
     pro_send(self.sk, dic, False)
     # 接收结果  {'ret':self.current_dir}
     dic = pro_recv(self.sk, False)
     print_correct('当前路径为:%s' % dic['ret'])
Exemple #5
0
def login(sk):
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()
    dic = {'opt':'login','username':username,'password':password}
    # 用协议传输
    pro_send(sk,dic)
    # 接收结果字典 不用协议
    ret_dic = pro_recv(sk,False)
    if ret_dic['ret']:
        # 返回用户名
        return username
    else:
        return False
Exemple #6
0
def conn_auth(sk):
    '''
    验证客户端到服务器的链接
    '''
    msg = sk.recv(32)
    # 注意 这里是bytes类型的!
    h = hmac.new((SECRET_KEY).encode('utf-8'), msg)
    digest = h.digest()
    sk.sendall(digest)
    # 从server端接收结果
    # server端没用协议 我们也不用
    dic = pro_recv(sk,False)
    # 认证成功
    if dic['ret']:
        return True
    else:
        return False
Exemple #7
0
 def my_dir(self, arg):
     # print('dir...',arg)
     # 接收server端的结果 用协议!结果可能会很大,会产生粘包
     dic = pro_recv(self.sk)
     total_size = dic['total_size']
     # 接收规则:
     recv_size = 0
     recv_data = self.sk.recv(total_size)
     # while recv_size < total_size:
     #     # 每次接收1024
     #     ret = self.sk.recv(1024)
     #     recv_data += ret
     #     # 注意recv_size 每次加接收数据的长度——每一次不一定收1024
     #     recv_size += len(ret)
     # else:
     #     ret = self.sk.recv(1024)
     #     if ret:
     #         recv_data += ret
     # # 注意 win系统 解码成 gbk
     cmd_ret = recv_data.decode('gbk')
     print(cmd_ret)
Exemple #8
0
 def my_get(self, arg):
     print('get...', arg)
     # 接收结果的字典
     dic = pro_recv(
         self.sk
     )  # {'exists':False,'filename':None,'file_size':None,'msg':'','file_md5':None}
     if not dic['exists']:
         print_error(dic['msg'])
     else:
         filename = dic['filename']
         file_size = dic['file_size']
         file_md5 = dic['file_md5']
         # 开始接收文件
         # 默认接收到download文件夹中
         download_path = os.path.join(DOWNLOAD_PATH, filename)
         file_recv(self.sk, download_path, file_size)
         recv_file_md5 = get_file_md5(download_path)
         # 返回给server的结果字典 {'ret':True} 不用协议发
         if recv_file_md5 == file_md5:
             dic = {'ret': True}
             pro_send(self.sk, dic, False)
             print_correct('文件传输完成,经校验后无误!')
Exemple #9
0
 def my_cd(self, arg):
     # print('cd...',arg)
     # 不用协议接收返回的字典 dic = {'ret':False,'ret_lis':[]}
     dic = pro_recv(self.sk, False)
     if not dic['ret']:
         print_error(dic['ret_lis'][0])