客户端client:

  1. import os
  2. import json
  3. import socket
  4. import struct
  5.  
  6. sk = socket.socket()
  7. sk.connect(('127.0.0.1',8090))
  8.  
  9. buffer = 1024
  10.  
  11. head = {'filepath':r'/Users/mango/Downloads/试题/07 python fullstack s9day9 第一次考试试题讲解',
  12. 'filename':r'07 python fullstack s9day9 第一次考试试题讲解.mp4',
  13. 'filesize':None} #报头
  14. file_path = os.path.join(head['filepath'],head['filename']) #文件路径
  15. filesize = os.path.getsize(file_path) #文件大小
  16. head['filesize'] = filesize
  17.  
  18. json_head = json.dumps(head) #字典转字符串
  19. bytes_head = json_head.encode('utf-8') #字符串转bytes
  20. head_len = len(bytes_head) #计算报头的bytes有多长
  21. struct_len = struct.pack('i',head_len) #打包成固定的4个字节
  22. sk.send(struct_len) #发送长度
  23. sk.send(bytes_head) #发送报头
  24. with open(file_path,'rb')as f: #打开文件
  25. while filesize:
  26. if filesize >= buffer:
  27. content = f.read(buffer)
  28. filesize -= buffer
  29. sk.send(content)
  30. else:
  31. f.read(filesize)
  32. filesize -= buffer
  33. sk.send(content)
  34. sk.close()#

服务端server:

  1. import socket
  2. import struct
  3. import json
  4.  
  5. sk = socket.socket()
  6. sk.bind(('127.0.0.1',8090))
  7. sk.listen()
  8. buffer = 1024
  9. conn,addr = sk.accept()
  10.  
  11. head_len = conn.recv(4)
  12. head_len = struct.unpack('i',head_len)[0]
  13. json_head = conn.recv(head_len).decode('utf-8')
  14. head = json.loads(json_head) # 报头
  15. filesize = head['filesize']
  16. with open(head['filename'],'wb')as f:
  17. while filesize:
  18. if filesize >= buffer:
  19. content = conn.recv(buffer)
  20. f.write(content)
  21. filesize -= buffer
  22. else:
  23. content = conn.recv(filesize)
  24. f.write(content)
  25. break
  26. conn.close()
  27. sk.close()

ftp上传下载文件的更多相关文章

  1. FTP上传下载文件(函数简易版)

    FTP上传下载文件(函数简易版) # 服务端 import socket import json import hashlib import struct import os user_dic = { ...

  2. java客户端调用ftp上传下载文件

    1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...

  3. shell ftp上传下载文件

    1. ftp自动登录批量下载文件. #####从ftp服务器上的/home/data 到 本地/home/databackup#### #!/bin/bash ftp -n<<! open ...

  4. shell脚本实现ftp上传下载文件

    前段时间工作中需要将经过我司平台某些信息核验数据提取后上传到客户的FTP服务器上,以便于他们进行相关的信息比对核验.由于包含这些信息的主机只有4台,采取的策略是将生成的4个文件汇集到一个主机上,然后在 ...

  5. FTP上传下载文件(面向对象版)

    # 服务端 import socketserver import os import json import hashlib import struct class MySocketServer(so ...

  6. python实现支持目录FTP上传下载文件的方法

    #!/usr/bin/env python # -*- coding: utf-8 -*- import ftplib import os import sys class FTPSync(objec ...

  7. 如何通过SecureCRT FTP上传下载文件

    通过SecureCRT  FTP方式从一台机器下载文件到另一台机器上: [root@TEST144239 ~]# ftp 10.30.1.25 Connected to 10.30.1.25 (10. ...

  8. shell通过ftp实现上传/下载文件

    直接代码,shell文件名为testFtptool.sh: #!/bin/bash ########################################################## ...

  9. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

随机推荐

  1. 如何降低死循环的 CPU 占用

    有的时候程序中需要使用死循环,比如消息监听就要用一个死循环,直到受到消息请求关闭才可能跳出循环. 一个 while(true){} 的循环中即便循环体是空的,也会占用几乎一整个 CPU 核心.为了降低 ...

  2. Android 7.0 Gallery图库源码分析4 - SlotView手势监听及页面跳转

    上篇文章讲了初始化View时会实例化一个SlotView并监听其事件,至于它是怎么实现的,用的是Android自带的GestureDetector. GestureDetector是Android自带 ...

  3. No content type provided for validation of a content model---WebLogic问题

    一个web项目,复制到Weblogic domain下的autodeploy目录下,可是从BEA管理控制台中的Deployments下却找不到该项目,奇怪了,这个以前拷过来就可以用的啊?! 查看控制台 ...

  4. Link Cut Tree 动态树 小结

    动态树有些类似 树链剖分+并查集 的思想,是用splay维护的 lct的根是动态的,"轻重链"也是动态的,所以并没有真正的轻重链 动态树的操作核心是把你要把 修改/询问/... 等 ...

  5. vuex中mutations与actions的区别

    要执行vuex中的函数,有两种方法: 1.commit,例如this.$store.commit("GETMODULESELECTLIST"); //mutations中的方法 2 ...

  6. 用pycharm运行django项目

    [点击]run -> Edit Configrations 弹出如下页面 点击“+” 点击Django server 在弹出页面的host填0.0.0.0 点击这个“文件夹” 点击‘+’后填下面 ...

  7. Xdoclet + Ant自己主动生成Hibernate配置文件

    在使用Hibernate的时候,过多的Hibernate配置文件是一个让人头疼的问题. 近期接触了Xdoclet这个工具. 它实际上就是一个自己主动代码生成的工具.Xdoclet不能单独执行,必须搭配 ...

  8. IOS Sqlite用户界面增删改查案例

    1.案例简单介绍 对SQLite操作进行了简单的封装,将对数据表操作转变成对对象的操作,并通过UI界面完毕对用户表的增.删.改.查,执行界面例如以下图所看到的 a 2.项目project文件夹 Use ...

  9. Android 的Recovery机制

    Android 的Recovery机制 文件夹 1. 系统的启动模式 1 1.1 Android系统的启动模式 1 1.2 系统的启动模式 2 2. Recovery模式中的三个部分 3 3. Rec ...

  10. 5种语言混合编程:C++、JS、python、Lisp、汇编

    /* 混合C++.JS.python.Lisp.汇编 1种语言,5种语法 */ main { //C++ vector<int> v; v.push(2); putsl(v.size()) ...