zoukankan      html  css  js  c++  java
  • 搭建FTP服务器与客户端(1)

    • FTP背景介绍
      FTP(File Transfer Protocol)协议,顾名思义为文件传输协议。由已故的Jon Postel与Joyce Reynolds开发,并于1985年10月发布。其底层基于TCP/IP协议。FTP目前主要用于匿名下载公共文件,也可以在两台跨系统的计算机之间传输文件。
      为了实现FTP协议,很显然需要同时构建FTP服务器与客户端。而服务器与客户端均通过两个套接字(分别绑定在“命令端口”与“数据端口”)进行双向通信。对于数据端口,从服务器的角度来看有两种绑定模式,分别为“主动模式”与“被动模式”。主动模式下,服务器的数据端口主动连接客户端的数据端口;被动模式下,服务器告知客户端数据端口号,再由客户端主动发起连接。
      本篇内容将对FTP服务器与客户端进行简单的构建,仅供参考!注意,搭建服务器需要用到第三方库pyftpdlib(没有的话,则在终端输入"pip install pyftpdlib"进行安装),搭建客户端需要用到标准库ftplib
    • 搭建FTP服务器
       1 # 搭建FTP服务器
       2 
       3 from pyftpdlib.authorizers import DummyAuthorizer
       4 from pyftpdlib.handlers import FTPHandler
       5 from pyftpdlib.servers import FTPServer
       6 
       7 import socket                        # 主要用于获取当前主机IP地址
       8 
       9 # 1. 添加授权用户
      10 authorizer = DummyAuthorizer()
      11 # 添加非匿名用户, 各项分别代表: 用户名, 密码, 用户根目录, 用户权限
      12 authorizer.add_user('xxx', '12345', './', 'elradfmwM')
      13 authorizer.add_user('yyy', '12345', '../', 'elradfmwM')
      14 # 添加匿名用户, 各项分别代表: 匿名用户根目录
      15 authorizer.add_anonymous('./')
      16 
      17 # 2. 更改FTP处理器的授权用户属性(归属于"类属性")
      18 handler = FTPHandler
      19 handler.authorizer = authorizer
      20 
      21 # 3. 通过主机名与端口号实例化FTP服务器, 并启动
      22 server = FTPServer((socket.gethostbyname(socket.gethostname()), 9999), handler)
      23 server.serve_forever()
      View Code

       此时,最好记录下主机的IP地址端口号,方便后面搭建客户端。

    • 搭建FTP客户端
       1 # 搭建FTP客户端
       2 
       3 from ftplib import FTP
       4 
       5 import socket                # 主要用于获取当前主机IP地址
       6 
       7 # 1. 实例化FTP对象, 并连接
       8 ftp = FTP()
       9 ftp.connect(socket.gethostbyname(socket.gethostname()), 9999)   # 应该输入服务器IP地址. 由于此处客户端与服务器建立在同一台主机上, 因此采用socket方法替代
      10 
      11 # 2. 登录
      12 ftp.login("xxx", "12345")
      13 # 匿名登录方法, 注意: 匿名用户的权限较低
      14 # ftp.login("anonymous")
      15 
      16 # 3. 交互
      17 # 查看当前工作目录, 及指定目录下的内容
      18 # print(ftp.pwd(), ftp.dir('./'))
      19 # 下载文件
      20 ftp.retrbinary("RETR aaa.jpg", open("aaa.jpg", 'wb').write)
      21 # 上传文件
      22 ftp.storbinary("STOR scheme.txt", open("scheme.txt", 'rb'))
      23 
      24 # 4. 退出
      25 ftp.quit()
      View Code

      也可以在浏览器地址栏输入url来访问服务器,如下:
      ftp://ip:port/
      其中,ip代表服务器IP地址,port为相应的端口号(如上面的9999)。

    • 参考
      https://www.cnblogs.com/huangxm/p/6274645.html
  • 相关阅读:
    vue递归组件的实现
    Vue左滑组件slider的实现
    vue 全局引用jq(打包后可能会遇到的问题)
    vue simple框架打包遇到报错问题
    HTML5 FormData实现文件上传实例
    长连接、短连接、长轮询和WebSocket
    解决axios IE11 Promise对象未定义
    Html5的map在实际使用中遇到的问题及解决方案
    Js参数RSA加密传输,jsencrypt.js的使用
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/xxhbdk/p/10016397.html
Copyright © 2011-2022 走看看