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 ...
随机推荐
- 《Cracking the Coding Interview》——第7章:数学和概率论——题目6
2014-03-20 02:24 题目:给定二位平面上一堆点,找到一条直线,使其穿过的点数量最多. 解法:我的解法只能适用整点,对于实数坐标就得换效率更低的办法了.请参见LeetCode - Max ...
- python /usr/bin/python^M: bad interpreter: No such file
今天在WingIDE下写了个脚本,传到服务器执行后提示: -bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No suc ...
- springboot09 事务 H2数据库
一.事务 1. 事务介绍 事务可以包含多个操作步骤 , 如果有一个步骤失败,那么这一组都以失败告终. 事务是指包含多个微小逻辑单元的一组操作, 只要其中有一个逻辑失败了,那么这一组操作就全部以失败告终 ...
- Dijkstra算法_最短路径_L2-001. 紧急救援
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- Struts2 学习笔记
1)Strust2是以WebWork为核心,采用拦截器的机制对用户请求进行处理. 2)Struts2框架结构: 3)简单来看整个Struts2的处理过程可以简单的理解为 用户的请求发送给对应的Acti ...
- Mac平台重新设置MySQL的root密码
Mac OS X - 重置 MySQL Root 密码 您是否忘记了Mac OS 的MySQL的root密码? 通过以下4步就可重新设置新密码: 1. 停止 mysql server. 通常是在 ...
- 洛谷 P2797 Facer的魔法 解题报告
P2797 Facer的魔法 题意:给你n个数,你可以选若干个数,使得平均数减中位数最大 数据范围:\(n \le 10^5\) 原题CF626E 很容易想到枚举一个中位数,但是如果选取的数字的个数是 ...
- 解决PKIX path building failed
起因 上周在生产环境部署时,把安全证书加到k8s-ingress中时发现报该错误 解决 找网上解决方案,因为这种问题相对比较少见,也没百度,直接谷歌,找到解决方案如下:https://stackove ...
- CodeForces - 789B B. Masha and geometric depression---(水坑 分类讨论)
CodeForces - 789B 当时题意理解的有点偏差,一直wa在了14组.是q等于0的时候,b1的绝对值大于l的时候,当b1的绝对值大于l的时候就应该直接终端掉,不应该管后面的0的. 题意告诉你 ...
- iOS-android-windowsphone等移动终端平台开发流程图
到了公司后,半个月时间就是在熟悉下面这张图里的流程, 项目流程图: 下面是我对这张图的一些理解: