Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程
BOOTP-TFTP-FTP
目录
- 文件传输流程
- 服务器建立过程
- 客户端建立过程
1 文件传输流程 / File Transfer Flow
利用BOOTP,TFTP,FTP三种传输协议,建立起客户端和服务器,实现一个简单的文件传输流程。
- Server初始化运行,开启3个线程,分别运行BOOTP,TFTP,FTP的服务器,进行监听等待;
- Client发起BOOTP广播,请求响应,在收到服务器响应后,根据回传的ip和文件名,启动TFTP,发起RRQ文件下载,等待文件传输完成,Client继续利用BOOTP发起广播,并根据回传信息启动TFTP(此处利用BOOTP传送的IP作为连接TFTP的IP),直至BOOTP广播无响应(超时),则结束BOOTP及TFTP;
- 根据TFTP下载的文件,读取其中需要下载的文件内容,利用FTP客户端发起登录,请求下载对应文件,直至FTP文件下载完成,退出FTP及客户端。
Note: 三种传输协议的实现过程可参考文末的相关阅读,部分内容如文件路径和文件名等均为硬编码,后续可做修改。
2 服务器建立过程 / Server Setup
服务器建立步骤主要有:
(1) 实例化BOOTP,TFTP,FTP三个服务器;
(2) 开启三个线程,分别运行服务器并监听等待。
- from BOOTP.BOOTPServer import BOOTPServer
- from TFTP.TFTPServer import TFTPServer
- from FTP.FTPServer import FTP_Server
- class CommuniDemoServer():
- def __init__(self):
- self.bootp = BOOTPServer()
- self.tftp = TFTPServer()
- self.ftp = FTP_Server()
- def server_start(self):
- self.bootp.start()
- self.tftp.start()
- self.ftp.start()
- server = CommuniDemoServer()
- server.server_start()
3 客户端器建立过程 / Client Setup
客户端建立步骤主要有:
(1) 实例化BOOTP,TFTP,FTP三个服务器;
(2) 建立循环,开启BOOTP广播,等待报文获取ip及文件名,开启TFTP下载对应文件。完成后继续广播请求,直至广播无回应;
(3) 打开TFTP下载的文件,获取需要下载的文件名,开启FTP进行下载。下载完成后结束FTP。
- from BOOTP.BOOTPClient import BOOTPClient
- from TFTP.TFTPClient import TFTPClient
- from FTP.FTPClient import FTP_Client
- class CommuniDemoClient():
- def __init__(self):
- self.bootp = BOOTPClient()
- self.tftp = TFTPClient()
- self.ftp = FTP_Client()
- def action(self):
- while True:
- recv = self.bootp.client_request()
- if recv is None:
- print('=== [BOOTP and FTTP] Action done')
- break
- self.tftp.server_ip = recv[0]
- self.tftp.readRequest(recv[1])
- self.ftp.download(['etsw.b3'])
- file_list = []
- try:
- with open('TFTP\\TFTPClientFile\\copy-files4.rc') as f:
- info_line = None
- while info_line != '':
- info_line = f.readline()
- info = info_line.strip('\n').split(':')
- if info != [''] and info != [' ']:
- file_name = info[1]
- if file_name != '' and file_name != ' ':
- file_list.append(file_name.strip(' '))
- except FileNotFoundError:
- print('=== [FTP] Download file no found')
- exit()
- self.ftp.download(file_list)
- print('=== [FTP] Exit')
- client = CommuniDemoClient()
- client.action()
相关阅读
1. BOOTP 理论
3. TFTP 理论
5. FTP 理论
Python的网络编程[5] -> BOOTP + TFTP + FTP -> 实现一个简单的文件传输流程的更多相关文章
- Python的网络编程[3] -> BOOTP 协议[0] -> BOOTP 的基本理论
BOOTP协议 / BOOTP Protocol 目录 基本理论 BOOTP 与 DHCP 通信流程 数据报文格式 报文加解码实现 1. 基本理论 / Basic Theory BOOTP(Boots ...
- Python的网络编程[3] -> BOOTP 协议[1] -> BOOTP 的 Python 实现
BOOTP实现 / BOOTP Implement 目录 BOOTP 的服务器建立过程 BOOTP 的客户端建立过程 Note: 理论部分请参考文末相关阅读链接 1 BOOTP 的服务器建立过程 服务 ...
- python之网络编程
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...
- python基础网络编程--转
python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...
- python——socket网络编程
一.OSI七层模型
- Python的网络编程--思维导图
Python的网络编程--思维导图
- Python高级网络编程系列之第一篇
在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...
- python 基础网络编程2
python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...
- python 基础网络编程1
python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...
随机推荐
- QBASIC教程
Qbasic 程序设计入门 BASIC(Beginner’s All-purpose Symbolic Instruction Code 的缩写,意为初学者通用符号指令代码)语言是在1964年由美国的 ...
- Percona-Tookit工具包之pt-slave-restart
Preface Sometimes,the threads(especially the SQL_Thread) will be terminated by accident.The ...
- dpkg.cfg
- 当网卡收到一个包的目的地址是本主机其他接口的IP时.2
arp包进入主机后要经过的过滤是:rp_filter rp_filter会过滤网段 所以说不要在进行arp_ignore测试的时候把rp_filter设置成2, 此时就不会对源地址进行路由的检查了 然 ...
- hdu 2578 Dating with girls(1) (hash)
Dating with girls(1) Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Codeforces - 220B Little Elephant and Array(莫队模板题)
题意: m次查询.每次查询范围[L,R]中出现次数等于该数字的数字个数. 题解: 由于分块,在每次询问中,同一块时l至多移动根号n,从一块到另一块也是最多2倍根号n.对于r,每个块中因为同一块是按y排 ...
- vue虚拟dom原理
Virual DOM是用JS对象记录一个dom节点的副本,当dom发生更改时候,先用虚拟dom进行diff,算出最小差异,然后再修改真实dom. vue的virtual dom的diff算法是基于sn ...
- ZCC loves cube(cube)
题目描述 调戏完了狗,ZCC开始玩起了积木.ZCC的面前有一块n*n的棋盘,他要用这些1*1*1的积木在棋盘上搭出一个宏伟的建筑.积木有三种颜色,ZCC认为一个建筑要被称为宏伟的应该满足能从正面看到的 ...
- 棘手的操作(bzoj 2333)
Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: ...
- HDU1285 裸的拓扑排序
拓扑排序: 拓扑排序是应用于有向无回路图(DAG)上的一种排序方式,对一个有向无回路进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u在v的前面.该序列说明了顶点表示的事件或 状态发生 ...