zoukankan      html  css  js  c++  java
  • Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程

    BOOTP-TFTP-FTP


    目录

    1. 文件传输流程
    2. 服务器建立过程
    3. 客户端建立过程

    1 文件传输流程 / File Transfer Flow

           利用BOOTP,TFTP,FTP三种传输协议,建立起客户端和服务器,实现一个简单的文件传输流程。

    1. Server初始化运行,开启3个线程,分别运行BOOTP,TFTP,FTP的服务器,进行监听等待;
    2. Client发起BOOTP广播,请求响应,在收到服务器响应后,根据回传的ip和文件名,启动TFTP,发起RRQ文件下载,等待文件传输完成,Client继续利用BOOTP发起广播,并根据回传信息启动TFTP(此处利用BOOTP传送的IP作为连接TFTPIP),直至BOOTP广播无响应(超时),则结束BOOTP及TFTP;
    3. 根据TFTP下载的文件,读取其中需要下载的文件内容,利用FTP客户端发起登录,请求下载对应文件,直至FTP文件下载完成,退出FTP及客户端。

    Note: 三种传输协议的实现过程可参考文末的相关阅读,部分内容如文件路径和文件名等均为硬编码,后续可做修改。

    2 服务器建立过程 / Server Setup

    服务器建立步骤主要有:

    (1)      实例化BOOTP,TFTP,FTP三个服务器;

    (2)      开启三个线程,分别运行服务器并监听等待。

     1 from BOOTP.BOOTPServer import BOOTPServer
     2 from TFTP.TFTPServer import TFTPServer
     3 from FTP.FTPServer import FTP_Server
     4 
     5 class CommuniDemoServer():
     6     def __init__(self):
     7         self.bootp = BOOTPServer()
     8         self.tftp = TFTPServer()
     9         self.ftp = FTP_Server()
    10 
    11     def server_start(self):
    12         self.bootp.start()
    13         self.tftp.start()
    14         self.ftp.start()
    15 
    16 server = CommuniDemoServer()
    17 server.server_start()

    3 客户端器建立过程 / Client Setup

    客户端建立步骤主要有:

    (1)      实例化BOOTP,TFTP,FTP三个服务器;

    (2)      建立循环,开启BOOTP广播,等待报文获取ip及文件名,开启TFTP下载对应文件。完成后继续广播请求,直至广播无回应;

    (3)      打开TFTP下载的文件,获取需要下载的文件名,开启FTP进行下载。下载完成后结束FTP。

     1 from BOOTP.BOOTPClient import BOOTPClient
     2 from TFTP.TFTPClient import TFTPClient
     3 from FTP.FTPClient import FTP_Client
     4 
     5 class CommuniDemoClient():
     6     def __init__(self):
     7         self.bootp = BOOTPClient()
     8         self.tftp = TFTPClient()
     9         self.ftp = FTP_Client()
    10 
    11     def action(self):
    12         while True:
    13             recv = self.bootp.client_request()
    14             if recv is None:
    15                 print('=== [BOOTP and FTTP] Action done')
    16                 break
    17             self.tftp.server_ip = recv[0]
    18             self.tftp.readRequest(recv[1])
    19         self.ftp.download(['etsw.b3'])
    20         file_list = []
    21         try:
    22             with open('TFTP\TFTPClientFile\copy-files4.rc') as f:
    23                 info_line = None
    24                 while info_line != '':
    25                     info_line = f.readline()
    26                     info = info_line.strip('
    ').split(':')
    27                     if info != [''] and info != [' ']:
    28                         file_name = info[1]
    29                         if file_name != '' and file_name != ' ':
    30                             file_list.append(file_name.strip(' '))
    31         except FileNotFoundError:
    32             print('=== [FTP] Download file no found')
    33             exit()
    34         self.ftp.download(file_list)
    35         print('=== [FTP] Exit')
    36 
    37 client = CommuniDemoClient()
    38 client.action()


    相关阅读


    1. BOOTP 理论

    2. BOOTP 的 Python 实现

    3. TFTP 理论

    4. TFTP 的 Python 实现

    5. FTP 理论

    6. FTP 服务器的 Python 实现

    7. FTP 客户端的 Python 实现

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/stacklike/p/8149927.html
Copyright © 2011-2022 走看看