zoukankan      html  css  js  c++  java
  • Python--day32--ftp文件传输报错的原因

    解决办法:把buffer改小

    server.py

     1 #实现一个大文件的上传或下载
     2 #配置文件 ip地址 端口号
     3 import json
     4 import socket
     5 import struct
     6 sk = socket.socket()
     7 #起服务
     8 sk.bind(('127.0.0.1', 8090))
     9 sk.listen()
    10 buffer = 1024
    11 conn,addr = sk.accept()
    12 #接收
    13 head_len = conn.recv(4)
    14 head_len = struct.unpack('i', head_len)[0]
    15 json_head = conn.recv(head_len).decode('utf-8')
    16 head = json.loads(json_head)
    17 filesize = head['filesize']
    18 with open(head['filename'], 'wb') as f:
    19     while filesize:
    20         print(filesize)
    21         if filesize >= buffer:
    22             content = conn.recv(buffer)
    23             f.write(content)
    24             filesize -= buffer
    25         else:
    26             content = conn.recv(filesize)
    27             f.write(content)
    28             break
    29 conn.close()
    30 sk.close()

    client.py

     1 #发送端
     2 import os
     3 import json
     4 import struct
     5 import socket
     6 sk = socket.socket()
     7 sk.connect(('127.0.0.1', 8090))
     8 buffer = 1024
     9 
    10 #发送文件
    11 head = {'filepath':r'C:UsersAdministratorDesktop',
    12         'filename':r'test.txt',
    13         'filesize':None}
    14 fie_path = os.path.join(head['filepath'],head['filename'])
    15 filesize = os.path.getsize(os.path.join(head['filepath'],head['filename']))
    16 
    17 head['filesize'] = filesize
    18 json_head = json.dumps(head)   #字典转成了字符串
    19 bytes_head = json_head.encode('utf-8')       #字符串转bytes
    20 print(json_head)
    21 print(bytes_head)
    22 #计算head的长度
    23 head_len = len(bytes_head)  #报头的长度
    24 pack_len = struct.pack('i', head_len)
    25 sk.send(pack_len)   #先发报头的长度
    26 sk.send(bytes_head) #再发送bytes类型的报头
    27 with open(fie_path, 'rb') as f:
    28     while filesize:
    29         print(filesize)
    30         if filesize >= buffer:
    31             content = f.read(buffer) #每次读出来的内容
    32             sk.send(content)
    33             filesize -= buffer
    34         else:
    35             content = f.read(filesize)
    36             sk.send(content)
    37             break
    38 sk.close()
  • 相关阅读:
    关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module
    MSTP协议介绍和堆叠技术介绍
    RSTP技术详解
    5招解决路由黑洞
    系统批量运维管理器Fabric之部署LNMP业务环境
    系统批量运维管理器Fabric之动态获取远程目录列表
    系统批量运维管理器Fabric之查看远程主机信息
    系统批量运维管理器Fabric之基本语法篇
    系统批量运维管理器Fabric之环境搭建篇
    LightGBM 调参方法(具体操作)
  • 原文地址:https://www.cnblogs.com/xudj/p/10304980.html
Copyright © 2011-2022 走看看