zoukankan      html  css  js  c++  java
  • 网络编程之FTP服务端与客户端

    #ftp_server
    import socket
    import struct
    import json
    import os
    import hashlib
    
    
    server=socket.socket()
    server.bind(('192.168.15.50',8000))
    server.listen(5)
    while 1:
        print('sever is working.......')
        conn,addr=server.accept()
        while 1:
            file_info_length_pack=conn.recv(4)
            file_info_length=struct.unpack('i',file_info_length_pack)[0]
    
            file_info_json=conn.recv(file_info_length).decode('utf-8')
            file_info=json.loads(file_info_json)
    
            action=file_info.get('action')
            file_name=file_info.get('file_name')
            file_size=file_info.get('file_size')
    
            md5=hashlib.md5()
            with open('put/'+file_name,mode='wb')as f:
                recv_data_length=0
                while recv_data_length <file_size:#file_size是文件总字节长度,recv_data_length是字节长度
                    data=conn.recv(1024)
                    recv_data_length+=len(data)
                    f.write(data)
                    md5.update(data)
                    print('文件总长度大小为:%s,已经接受了%s'%(file_size,recv_data_length))
                else:
                    print('文件上传成功')
                    conn.send('OK'.encode('utf-8'))
    
    
            recv_md5=conn.recv(1024).decode('utf-8')
            if recv_md5==md5.hexdigest():
                print('经对比文件传输无误,OK')
                conn.send('OK'.encode('utf-8'))
                break
    

      

    #ftp_client
    
    import socket
    import struct
    import os
    import json
    import hashlib
    
    client=socket.socket()
    client.connect(('192.168.15.50',8000))
    while 1:
      cmd=input("请输入命令").strip()
      action,file_name=cmd.split(' ')
    
      file_size=os.path.getsize(file_name)
    
      file_info={
          'action':action,
          'file_name':file_name,
          'file_size':file_size
      }
    
      file_info_json=json.dumps(file_info).encode('utf-8')
    
      ret=struct.pack('i',len(file_info_json))
      client.send(ret)
    
      client.send(file_info_json)
    
    
      md5=hashlib.md5()
      with open(file_name,mode='rb')as f:
          for line in f:
              client.send(line)
              md5.update(line)
          response1=client.recv(1024).decode('utf-8')
          if response1=='OK':
              print('上传完成')
    
      client.send(md5.hexdigest().encode('utf-8'))
      response2=client.recv(1024).decode('utf-8')
      if response2=='OK':
          print('经对比文件传输无误')
          break
      else:
          print('传输过程中,文件改变,请重新传输')
    
    
    client.close()
    

      

  • 相关阅读:
    MOSS网站与我的网站显示的登录用户信息不同
    Windows Workflow: The Base Activity Library
    非对称加密相关基础
    Windows SharePoint Services 3.0 应用程序模板
    MOSS2007备份还原后搜索服务出现的问题
    MOSS发生“未能转换部分或所有标识引用”错误的处理
    MOSS工作流开发中两个非常实用的类
    MOSS2007最终用户培训资料
    [单调队列] UVA 10534 Wavio Sequence
    [拓扑排序] PKU 1094 Sorting It All Out
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/9721035.html
Copyright © 2011-2022 走看看