python scoket、SocketServer简单实现文件上传下载
2019独角兽企业重金招聘Python工程师标准>>>
1.描述
实现任何位置文件下载到客户端执行的当前目录下
实现任何位置文件上传到服务端执行的当前目录下服务端:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
# @Date : 2015-12-23 23:24:32
# @Author : eddy (278298125@qq.com)
# @Link : http://my.oschina.net/eddylinux
# @Version : 1.0import SocketServer
import time
import os
#定义当前目录
current_dir = os.getcwd()
#定义一个类
class EddyFtpserver(SocketServer.BaseRequestHandler): #定义接收文件方法def recvfile(self, filename): print "starting reve file!"f = open(filename, 'wb') self.request.send('ready') while True: data = self.request.recv(4096) if data == 'EOF': print "recv file success!"breakf.write(data) f.close() #定义放送文件方法 def sendfile(self, filename): print "starting send file!"self.request.send('ready') time.sleep(1) f = open(filename, 'rb') while True: data = f.read(4096) if not data: breakself.request.sendall(data) f.close() time.sleep(1) self.request.send('EOF') print "send file success!"#SocketServer的一个方法 def handle(self): print "get connection from :",self.client_address while True: try: data = self.request.recv(4096) print "get data:", data if not data: print "break the connection!"break else: action, filename = data.split() #判断上传if action == "put": #上传文件保存到当前目录下filename = current_dir + '/' + os.path.split(filename)[1]self.recvfile(filename) #判断下载elif action == 'get': self.sendfile(filename) else: print "get error!"continueexcept Exception,e: print "get error at:",e if __name__ == "__main__": host = 'localhost' port = 8888#实例化s = SocketServer.ThreadingTCPServer((host,port), EddyFtpserver) s.serve_forever() 客户端
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2015-12-23 23:24:53
# @Author : eddy (278298125@qq.com)
# @Link : http://my.oschina.net/eddylinux
# @Version : 1.0import socket
import time
import os
ip = 'localhost'
port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#定义当前目录
current_dir = os.getcwd()
def recvfile(filename): print filenameprint "server ready, now client rece file~~"f = open(filename, 'wb') while True: data = s.recv(4096) if data == 'EOF': print "recv file success!"breakf.write(data) f.close()
def sendfile(filename): print "server ready, now client sending file~~"f = open(filename, 'rb') while True: data = f.read(4096) if not data: breaks.sendall(data) f.close() time.sleep(1) s.sendall('EOF') print "send file success!"def confirm(s, client_command): s.send(client_command) data = s.recv(4096) if data == 'ready': return Truetry: s.connect((ip,port)) while 1: client_command = raw_input(">>") if not client_command: continueaction, filename = client_command.split() if action == 'put': if confirm(s, client_command): sendfile(filename) else: print "server get error!"elif action == 'get': if confirm(s, client_command): print current_dirprint filenamefilename = current_dir + '/' + os.path.split(client_command)[1]print filenamerecvfile(filename) else: print "server get error!"else: print "command error!"
except socket.error,e: print "get error as",e
finally: s.close()
运行服务端
python EddyFtp_server.py
get connection from : ('127.0.0.1', 56051)
运行客户端
python EddyFtp_client.py
>>put /tmp/b.pdf
server ready, now client sending file~~
send file success!
转载于:https://my.oschina.net/eddylinux/blog/551441
python scoket、SocketServer简单实现文件上传下载相关推荐
- python实现阿里云OSS文件上传下载
一 前言 最近使用到阿里云的产品OSS,用于临时存储线上抽取的数据,然后起本地化的流程去OSS拉回本地,进行自动化数据验证.OSS提供了web方式的管理控制台,命令行管理工具,提供了主流的SDK支持, ...
- 树莓派3B+采用花生棒进行内网穿透,从拆箱到实现SSH远程控制与sftp简单远程文件上传下载
树莓派3B+采用花生棒进行内网穿透,使用sftp实现远程控制与简单远程文件上传下载) 准备步骤 物理环境搭建 关于基础配置的博文推荐 树莓派联网配置 基础联网 配置静态ip 花生壳内网穿透 常用远程端 ...
- 关于SpringMVC框架实现简单的文件上传下载(ssm)
关于ssm框架整合文件的上传和下载. 首先来看单个附件的上传和下载: 1.首先创建一个用来测试的jsp文件上传下载的页面 代码如下 <%@ page language="java&q ...
- python实现TCP远程服务器文件上传,下载系统
TCP服务器代码如下: from socket import *def client_upload(client_socket):"""上传数据""& ...
- salesforce 零基础学习(四十二)简单文件上传下载
项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...
- 利用Socketserver实现简单的文件上传
利用Socketserver实现简单的文件上传 server.py #!/usr/bin/env python #coding:utf-8 import SocketServer import os ...
- python ftp下载文件_文件上传下载Python
点击上方蓝字关注我! 图片来源 pexels.com 简单实现文件上传.下载 1 Server端 # -*- coding: utf-8 -*-import jsonimport os__author ...
- 简述php中文件上传过程,简单php文件上传详细说明
关于文件上传我们讲了很多,这只是一款最基本的简单的文件上传功能,同时本教程也介绍了关于上传的原理以及各种函数的使用与file的参数说明,以及php.ihi设置上传文件大小配置等. 1 如果实现小文件 ...
- 使用jspsmartupload完成简单的文件上传系统
请不要妄想,一个html的file控件,再加上JavaScript与jQuery语句就可以完成文件上传, 文件上传系统从来是需要配合服务器来完成的 用户把自己的文件上传到服务器上 文件上传系统是很复杂 ...
最新文章
- 网络模型:(0)背景
- java exception用法_JavaException的使用
- 把文件夹下的所有文件打包成一个zip包
- Docker 镜像之存储管理
- 百度地图API : 自定义标注图标
- Utility Manager 的一些百度不了的操作
- 论文浅尝 | How to Keep a Knowledge Base Synchronized
- php 中curd表达啥,thinkphp的CURD和查询方式介绍
- 利用国内镜像加快pip下载速度和成功率
- 量子计算机的工作原理(转)
- 个性化网站建设的一般流程
- ardupilot 关于设备车Rover的学习《3》------模式控制
- 码无止境(1)——一个科研项目立项时的小程序(字典嵌套列表)
- docker 容器启动成功 外部访问不到原因
- Unity报错:Assertion failed on expression: ‘IsMatrixValid(matrix)‘...的解决办法
- 标签云制作工具wordart的注册登录页面介绍
- 常用计算机的外设有哪些,电脑外设设备有哪些 电脑外设产品什么品牌好
- JS - 利用performance.timing进行性能分析
- 详解 pcap_findalldevs_ex
- GitHub 项目被爆 刷 Star!阿里这波又摊上事了...
热门文章
- ajxs跨域 php_php设置header头允许ajax跨域请求
- 限制服务器访问指定网站,如何允许或限制某一国或地区的用户访问网站
- python内核大小_关于keras.layers.Conv1D的kernel_size参数使用介绍
- (1) 漂亮的日期控件
- jsDate对象和倒计时图片案例
- linux系统部署静态网站,Linux笔记15 使用Apache服务部署静态网站。
- python dict遍历文件_python 字典(dict)遍历的四种方法性能测试报告
- 机器学习算法—集成算法原理详解
- Java学习小程序(10)三个等级的才字母游戏
- Scala入门到精通——第十九节 隐式转换与隐式参数(二)