中心思想: 传递过去文件的大小,根据文件的大小判断是否文件上传完成; 传递/接受文件采用分流的形式,每次传递/接受部分数据;  文件的读取均采用绝对路径实现,而且是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. Java学习之路(三):Java中的数组

    数组的概述和定义的格式 数组的作用: 用来存储同种数据类型的多个值 数组的基本概念: 数组是存储同一种数据类型多个元素的集合.就相当于一个容器. 注意:数组既可以存储基本数据类型,也可以存储引用数据类 ...

  2. 案例16-validate自定义校验规则校验用户名是否存在

    1 知识点 2 register.jsp代码 注意自定义校验规则的时候,提交必须是同步的方式. <%@ page language="java" contentType=&q ...

  3. unity 工具开发基础

    using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; usin ...

  4. 九度oj 1004 Median 2011年浙江大学计算机及软件工程研究生机试真题

    题目1004:Median 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:14162 解决:3887 题目描述: Given an increasing sequence S of N i ...

  5. MyBatis Mapper XML 文件 的学习详解

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

  6. SpringMVC入门(一)

    非注解的SpringMVC 1.创建一个web工程 2.导入工程需要的jar包 3.配置SpringMVC的前端控制器  前端控制器(DispatcherAdapter)需要在web.xml文件中进行 ...

  7. python-入门教程(-)

    # hello worldprint("hello world") # 变量msg = "使用变量"print(msg) # 字符串大小写变换(仅针对英文)na ...

  8. c#中用DataView查询

    新人菜鸟 在开发一款软件,用到了 MyS中的 DataView 查询.查询后判断视图是否有返回值,找了好久,终于找到了他的 DataView XX.Count 参数. string table = S ...

  9. golang学习之文件上传

    首先是上传页面upload.html: <!doctype html> <html> <head> <meta charset="utf-8&quo ...

  10. Linux必会必知

    一.前言 Linux作为一个开源系统,被极客极力推崇,作为程序员不来了解一下,那就亏了 Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次 ...