python selectors ftp服务端

import selectors
import socket,os,sys
BASE_DIR= os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

sel = selectors.DefaultSelector()

cmdlist=[‘put‘,‘get‘]

class Ftp(object):
    def __init__(self):
        pass

    def accept(self,sock, mask):
        conn, addr = sock.accept()  # Should be ready
        conn.setblocking(False)
        sel.register(conn, selectors.EVENT_READ, self.read)

    def read(self,conn, mask):
        # while True:
            cmd = conn.recv(1024).decode().split()  # Should be ready
            if len(cmd) != 2 :
                conn.send(b‘wrong command!‘)
            elif cmd[0] in cmdlist:
                # conn.send(b‘ok‘)
                if hasattr(self,‘cmd_%s‘%cmd[0]):
                    fc = getattr(self, "cmd_%s" % cmd[0])
                    fc(conn,cmd[-1])
            else:
                print(‘closing‘, conn)
                sel.unregister(conn)
                conn.close()

    def cmd_put(self,conn,file):
        conn.setblocking(True)
        print("Put [%s] to client" % file)
        conn.send(b"put01")  ## please send the file size
        filesize = int(conn.recv(1024).decode())
        conn.send(b"put02")  ## please send the file
        upload_file=os.path.join(BASE_DIR,‘data‘,os.path.basename(file))

        with open(upload_file, ‘wb‘) as f:
            size = 0
            while True:
                if (filesize - size) > 10240:
                    recvsize = 10240
                else:
                    recvsize = filesize - size
                data = conn.recv(recvsize)
                size += len(data)
                if int(filesize) == size:
                    f.write(data)
                    f.flush()
                    print("Upload [%s] done ....." % upload_file)
                    conn.send(b‘putok‘)
                    break
                f.write(data)
                f.flush()

    def cmd_get(self,conn,file):
        conn.setblocking(True)
        if os.path.exists(file):
            file_size = str(os.path.getsize(file)).encode()
            conn.send(b‘get01‘)  ## ready to send file size
            rectag1 = conn.recv(1024).decode()
            if rectag1 == ‘get01‘:conn.send(file_size)
            rectag2 = conn.recv(10240).decode()
            if rectag2 == ‘get02‘:
                while True:
                    with open(file, ‘rb‘) as f:
                        d = f.read()
                        conn.sendall(d)
                    rectag = conn.recv(1024).decode()
                    if rectag == ‘getok‘:
                        print("Download [%s] done!" % file)
                        break
        else:
            print("The [%s] not exists!" %file)
            conn.send(b‘get00‘)

def run():
    start_ftp = Ftp()
    sock = socket.socket()
    sock.bind((‘localhost‘, 9000))
    sock.listen(100)
    sock.setblocking(False)
    sel.register(sock, selectors.EVENT_READ, start_ftp.accept)

    while True:
            events = sel.select()
            for key, mask in events:
                callback = key.data
                try:
                    callback(key.fileobj,mask)
                except:
                    sel.unregister(key.fileobj)
                    key.fileobj.close()
时间: 2024-07-31 22:15:24

python selectors ftp服务端的相关文章

python的flex服务端数据接口开发

python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted有很好的异步机制. 下面的我写的一个简单的验证用户的python服务端: ______________________________DBServer.py # Copyright (c) 2009-2010 The Newjh Project."""@author: Roy@s

Android版Ftp服务端软件

分享一款开发的Android版Ftp服务端软件,支持Android4.0及以上版本,可以实现局域网无线传输文件到手机,或者把手机上的多媒体文件分享到iPad等设备来扩展这些设备的存储空间,详情请见软件的使用帮助,截图如下: iPad等设备播放手机上的多媒体文件: 下载地址: http://pan.baidu.com/s/1sjlZBzR 提取码: khji

python 模拟HTTP服务端

使用python模拟http服务端,自定义返回信息头部: #!/usr/bin/python import os from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer Host = '' Port = 8080 class RequestHandler(BaseHTTPRequestHandler):         def do_GET(self):                 Time = os.popen('date 

FTP服务端部署

FTP服务端搭建(本地用户登入:使用本地用户和密码登入)1.文件配置:vsftpd.conf: 主配置文件ftpusers: 指定哪些用户不能访问FTP服务器user_list: 指定的用户是否可以访问ftp服务器2.编辑主配置文件(1)禁用匿名用户登录:anonymous_enable=NO(2)使user_list文件下的用户生效userlist_enable=YESuserlist_deny=NO(3)限制用户不能上传write_enable=NO(4)重新启动 FTP 服务service

python的select服务端的代码和客户端的代码

服务端的代码 import socket import queue import select ip_bind = ("127.0.0.1",9000) message_queue = {} #保存客户端发送过来的信息,将消息放入到队列中 input_list = [] output_list = [] if __name__ == '__main__': server = socket.socket() server.bind(ip_bind) server.listen(10) s

python创建udp服务端和客户端

1.udp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 8888 6 BUFSIZ = 1024 7 ADDR = (HOST, PORT) 8 9 udpSerSock = socket(AF_INET, SOCK_DGRAM) 10 udpSerSock.bind(ADDR) 11 12 while True: 13 print('waiting for message...'

Pywss - 用python实现WebSocket服务端

一种类似Flask开发的WebSocket-Server服务端框架,适用python3.X 1.安装模块Pywss pip install pywss 2.搭建简易服务器 2.1 服务端代码 代码简介 route: 注册请求路径 example_1(request, data): request: socket句柄,能够发送和接收数据接.发送数据request.ws.send(data),收数据request.ws_recv(1024) data: 客户端发送的数据存于此处 from pywss

Ftp服务端安装-Linux环境

目的 为什么要搭建FTP服务器,进入maven仓库下载Jar包时点击相应的链接进去会看到目录结构,这个就是ftp站点.可以随意的下载. 环境 Linux系统为CentOS6.5 安装步骤 查询是否已安装 rpm -qa | grep vsftpd 如果结果显示为“vsftpd-1.1.3-8”,则说明系统已经安装vsftpd服务器.若没有回复,即系统中没有安装. 如下图,说明没有安装 安装并设为开机启动 yum -y install vsftpd chkconfig vsftpd on 服务基本

Serv-U精简版FTP服务端

Window搭建自己的FTP,Serv-U是很不错的选择... 00.运行视图 注意: 此版本是绿色破解版,个人使用很便捷的.不建议商业使用... download: https://pan.baidu.com/s/1sl0Xbg5 原文地址:https://www.cnblogs.com/xiaochina/p/7435718.html