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 实现

  • 相关阅读:
    Bate版本控制报告
    【探路者】第五周立会报告6(总第32次)
    【探路者】第五周立会报告5(总第31次)
    【探路者】第五周立会报告4(总第30次)
    【探路者】第五周立会报告3(总第29次)
    【探路者】第五周立会报告2(总第28次)
    例行报告
    【探路者】第五周立会报告1(总第27次)
    【探路者】第四周立会报告7(总第26次)
    “Hello world!”团队第三周贡献分规则
  • 原文地址:https://www.cnblogs.com/stacklike/p/8149927.html
Copyright © 2011-2022 走看看