老男孩----上海校区

  简易FTP

客户端端

import  socket
import struct
import json
import os
class MYTCPCLIENT:
address_family = socket.AF_INET
socket_type = socket.SOCK_STREAM
allow_reuse_address = False
max_packet_size = 8192
coding ='utf-8'
request_queue_size = 5
def __init__(self,server_address,connect = True):
self.server_address = server_address
self.socket = socket.socket(self.address_family,self.socket_type) if connect:
try:
self.client_connect()
except:
self.client_close()
raise
def client_connect(self):
self.socket.connect(self.server_address) def client_close(self):
self.socket.close() def run(self):
while True:
choice = input(">>>>:").strip()
if not choice:continue
f = choice.split()
cmd=f[0]
if hasattr(self,cmd):
func = getattr(self,cmd)
func(f) def put(self,args):
cmd = args[0]
filename = args[1]
if not os.path.isfile(filename):
print('file:%s is not exists' %filename)
return
else:
filesize = os.path.getsize(filename) head_dic = {'cmd':cmd,'filename':os.path.basename(filename),'filesize':filesize}
head_json=json.dumps(head_dic)
head_json_bytes = bytes(head_json,encoding=self.coding)
head_struce = struct.pack('i',len(head_json_bytes))
self.socket.send(head_struce)
self.socket.send(head_json_bytes)
send_size = 0
with open(filename,'rb') as f:
for line in f:
self.socket.send(line)
send_size+=len(line)
print(send_size)
else:
print('下载成功') client = MYTCPCLIENT(('127.0.0.1',8080))
client.run()

服务端

import  socketserver
import struct
import json
import os class FtpServer(socketserver.BaseRequestHandler):
coding='utf-8'
server_dir ='file_upload'
max_packet_size = 1024
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
def handle(self):
print(self.request)
while True:
data = self.request.recv(4)
data_len=struct.unpack('i',data)[0]
head_json= self.request.recv(data_len).decode(self.coding)
head_dic = json.loads(head_json)
cmd = head_dic['cmd']
if hasattr(self,cmd): # 判断这个对象中有没有这个属性
func=getattr(self,cmd) #获取对象属性值
func(head_dic)
def put(self,args):
flie_path = os.path.normpath(os.path.join(
self.BASE_DIR,
self.server_dir,
args['filename']
))
filesize=args['filesize']
recv_size = 0
print('------>',flie_path)
with open(flie_path,'wb') as f:
while recv_size <filesize:
recv_data = self.request.recv(self.max_packet_size)
f.write(recv_data)
recv_size += len(recv_data)
print('recvsize:%s filesize:%s' % (recv_size, filesize))
ftpserver = socketserver.ThreadingTCPServer(('127.0.0.1',8080),FtpServer)
ftpserver.serve_forever()

简易FTP的更多相关文章

  1. C语言:自己编写的简易ftp客户端,包含(列表,进入目录,上传文件,下载文件,删除文件)功能

    //简易ftp客户端#include <stdio.h> #include <string.h> #include <sys/types.h> #include & ...

  2. Ubuntu 14.10下搭建简易FTP服务器[vsftpd]

    Ubuntu下公认最易上手的ftp软件是vsftpd,既然标题都说了是“简易”的,那么必然是用最大众的..下面是正题 目标需求:搭建一个允许匿名/本地登录的FTP,并且支持上传/下载/修改功能,同时F ...

  3. go语言实现简易ftp客户端

          版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xiangxianghehe/article/details/78310249 Go语言实 ...

  4. c# 基于FTP协议的简易软件自动升级程序

    最近在重写了一个老的产品条码扫描程序,客户端数越有30个,因为经常有更新,C/S维护非常不方便,所以做一个自动更新程序特别有必要. 在网上随便找了找自动更新的方案,大多使用VS的发布/更新功能,不太喜 ...

  5. Linux建立FTP服务器

    http://blog.chinaunix.net/uid-20541719-id-1931116.html http://www.cnblogs.com/hnrainll/archive/2011/ ...

  6. 【树莓派+.NET MF打造视频监控智能车】控制篇(树莓派)

    对已经具备一定Linux基础的人来说,树莓派学习起来应该非常简单自然.在他们眼中,树莓派就是一个简易版的,卡通版的Linux而已.但是对我这样一个早已习惯微软技术生态系统的人或者初学者来说,要实现一个 ...

  7. 如何在Cent OS上安装和部署jdk与tomcat?

    Cent OS是一款Linux系统.在商业应用中,Linux操作系统在服务器市场有着广泛的运用,这源于Linux系统的几大优点: 1.跨平台的硬件支持 由于Linux 的内核大部分是用C 语言编写的, ...

  8. 打通 DevOps 任督二脉 ,CODING 2.0 制品库全新上线

    CODING 在近期的 KubeCon 2019 大会上发布了 CODING 2.0,同时发布了最新功能--制品库.CODING 不断完善 DevOps 工具链,旨在持续提升研发组织软件交付的速度与质 ...

  9. FTP服务器简易有效的访问方法

    访问FTP服务器传统的方法是使用专用的客户端程序,如CuteFTP,8UFTP等,也包括命令行的FTP客户端c:\windows\system32\ftp.exe程序. FTP服务器也有简易访问方法 ...

  10. day-1 用python编写一个简易的FTP服务器

    从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...

随机推荐

  1. docker部署rocketmq

    docker pull foxiswho/rocketmq:server-4.7.0  (拉取镜像) docker pull foxiswho/rocketmq:broker-4.7.0 (拉取镜像) ...

  2. 【Frida】打印方法的调用堆栈

    function printstack() { console.log(Java.use("android.util.Log").getStackTraceString(Java. ...

  3. 记录将Base64字符串转化为图片遇到的问题

    今天通过与别人写的api交互,获取到了一个原为图片的base64字符串,在网上找到了相互转换的方法,但是在转化时,报出了"输入不是有效的 Base64 字符串,因为它包含非 base 64 ...

  4. SpringBoot + Shiro + Redis + JWT 实现无状态登录

    这是一篇随笔和心得,不会写入任何的一种代码.只是提供一种逻辑. 在我之后,我会发现这种逻辑尤为重要 最近在做一套通用的权限管理项目,考虑使用的是Shiro 的这个框架.认证和鉴权就是权限框架所解决的问 ...

  5. PY0271验证码的创建

    生成的 随机背景色的 效果 from PIL import Image,ImageDraw,ImageFont,ImageFilterimport random# 设置随机的背景颜色.def rndC ...

  6. CentOS 7安装配置vsftp并搭建FTP(一)

    vsftp-VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件.关于这个软件的详细信息 大家可以自行百度. 以上自己安装vsftp系统环境 二.查看自己的服务器是否安装了vsftp ...

  7. 虚拟机redis无法连接

    1.cp redis.conf /etc/ 2.vi /etc/redis.conf 3.设置 Redis 可以后台运行 daemonize yes 4.关闭 redis 保护模式,使得可以远程连接 ...

  8. 求助:我需要用Python中parsel模块提取文章的文本内容,有什么办法

    求助: 像这样 我想提取小说文章内容 怎么提取 我要用的模块有parsel <!DOCTYPE html> <html lang="en"> <hea ...

  9. RocketMQ学习笔记

    RocketMQ学习笔记 RocketMQ学习参考官网文档:https://github.com/apache/rocketmq/tree/master/docs/cn . 由于RocketMQ是有国 ...

  10. Node.js 源码解读 EventLoop

    之前断断续续开发过一些 Node.js 的项目,但只仅限于使用它实现一些功能,没有过多对底层深入的研究.现在因为公司大前端组内的服务端渲染直出.BFF(Backend For Frontend) 等需 ...