中心思想: 传递过去文件的大小,根据文件的大小判断是否文件上传完成; 传递/接受文件采用分流的形式,每次传递/接受部分数据;  文件的读取均采用绝对路径实现,而且是bytes的形式读写

客户端:

# 客户端
import socket
import os
# family=AF_INET, 代表使用IPV4的IP协议
# type=SOCK_STREAM 代表使用TCP协议进行连接
client = socket.socket()
ip_addr = ('127.0.0.1', 9999)
BasePath = os.path.dirname(os.path.abspath(__file__))
while True:
client.connect(ip_addr)
inp = input('>>>:') # post | hhh.jpg
cmd, path = inp.split('|')
path = os.path.join(BasePath, path)
filename = os.path.basename(path)
file_size = os.stat(path).st_size
file_info = '%s|%s|%s' % (cmd, filename, file_size)
client.sendall(bytes(file_info, 'utf-8'))
file_send = 0
with open(path, 'rb') as f:
while file_send != file_size:
data = f.read(1024)
client.send(data)
file_send += len(data)
print('上传成功!')
client.close()
break
client.close()

服务器端:

# 服务端
import socket
import subprocess
import os
# family=AF_INET, 代表使用IPV4的IP协议
# type=SOCK_STREAM 代表使用TCP协议进行连接 server = socket.socket() # 创建socket
ip_addr = ('127.0.0.1', 9999) # 1024之前的端口,默认是OS使用
server.bind(ip_addr) # 要求必须是一个元组
server.listen(3) # 开始监听传入连接。在拒绝连接之前,可以挂起的最大连接数量。
BasePath = os.path.dirname(os.path.abspath(__file__))
while True:
conn, addr = server.accept() # 接受连接并返回(conn,address)
# 其中conn是新的套接字对象[客户端],可以用来接收和发送数据。
# address是连接客户端的地址。
while 1:
data = str(conn.recv(1024), 'utf-8')
cmd, file_name, file_size = data.split('|')
path = os.path.join(BasePath, 'hhh', file_name)
file_size = int(file_size)
rec_size = 0
with open(path, 'ab') as f:
while rec_size != file_size:
data = conn.recv(1024)
rec_size += len(data)
f.write(data)
print('接受成功!')
break
conn.close()
server.close()

Python学习---网络文件上传的更多相关文章

  1. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  2. python Django之文件上传

    python Django之文件上传 使用Django框架进行文件上传共分为俩种方式 一.方式一 通过form表单进行文件上传 #=================================== ...

  3. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  4. SSM + Android 网络文件上传下载

    SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...

  5. python学习之文本文件上传

    最近用python的flask框架完成了一个最基本的文本文件上传,然后读取. 前端用的Angular的ng2-file-upload完成文件上传,后端用flask接收上传的文件,接着做处理. 在交互的 ...

  6. Python Socket实现文件上传(TCP协议)

    在TCP协议下通过socket模块实现文件上传 #!/usr/bin/env python # -*- coding: utf-8 -*- # desc: tcp_server_file_upload ...

  7. selenium+python自动化77-autoit文件上传

    前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工 ...

  8. selenium+python自动化77-autoit文件上传【转载】

    前言 关于非input文件上传,点上传按钮后,这个弹出的windows的控件了,已经跳出三界之外了,不属于selenium的管辖范围(selenium不是万能的,只能操作web上元素).autoit工 ...

  9. Spring MVC学习笔记——文件上传

    1.实现文件上传首先需要导入Apache的包,commons-fileupload-1.2.2.jar和commons-io-2.1.jar 实现上传就在add.jsp文件中修改表单 enctype= ...

随机推荐

  1. springboot整合jsp踩坑

    springboot以其高效的开发效率越来越多的用在中小项目的开发,并且在分布式开发中的使用也很广泛,springboot官方推荐的前端框架却是thymeleaf,并且默认不支持jsp,而大部分jav ...

  2. MacOS系统下的图形化工具

    MacOS系统下的图形化工具 MacOS系统下安装了Git后,发现如果Git中有中文文档操作还是比较麻烦(需要输入中文的文件名).图形化对Git的操作还是相对于方便一些.所以准备找一个图形化的工具. ...

  3. html锚点(mao dian)--特殊的超链接

    锚点(anchor):其实就是超链接的一种,一种特殊的超链接 普通的超链接,<a href="路径"></a> 是跳转到不同的页面 而锚点,<a hr ...

  4. Hibernate项目环境搭建

    1.首先在eclipse里面新建一个Java工程. 2.在数据库中新建一个数据库(无需创建表,有Hibernate生成). 3.在项目中导入Hibernate所依赖的jar包,该jar包可以在此下载: ...

  5. Java入门系列-23-NIO(使用缓冲区和通道对文件操作)

    NIO 是什么 java.nio全称java non-blocking(非阻塞) IO(实际上是 new io),是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(bo ...

  6. Centos 从零开始 (四)

    12:nginx架设 rtmp直播 首先在之前 所安装的nginx是用 yum 源安装的.却不能为nginx添加他的模块 所以要用wget来下载源文件 来进行源码配置与安装.开搞 [root@loca ...

  7. Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动

    如果我们习惯于数学坐标系,那么对于Silverlight中的坐标系可能会有些不习惯.因为在Silverlight中的坐标系与Flash中的坐标系一样,一切都的颠倒的.在标准的数学坐标系中,X轴表示水平 ...

  8. 05.部分类 partial

    namespace _06.部分类 { class Program { static void Main(string[] args) { } } /// <summary> /// 这个 ...

  9. JSON与null

    org.json.JSONObject orgJSON = new org.json.JSONObject(); // The method put(String, Collection) is am ...

  10. 【转】spring boot使用Druid和监控配置

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012100371/article/details/76602612 Druid是Java语言中最好 ...