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

原文地址:https://www.cnblogs.com/stacklike/p/8149927.html