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 ...
随机推荐
- Flash文件在asp页面无法播放,网页上面的Flash文件在火狐浏览器不播放
第一个问题:Flash文件放到asp页面以后无法播放. 解决方法:用浏览器打开页面->F12,选择Network,如下图: 然后刷新页面,如下图: 点击左侧状态是404的文件,如图: 可以发现F ...
- Jmeter beanshell preprocessor随机添加任意多个请求参数
介绍下本次使用beanshell preprocessor的原因: 1.系统下可添加产品,一个产品可以有多个产品主题(比如:产品A(杭州三日游)拥有三个主题(研学.红学.夏令营)),我们在每次添加产品 ...
- ASP.NET Core API ---状态码
摘录自:https://www.cnblogs.com/cgzl/p/9047626.html 状态码是非常重要的,因为只有状态码会告诉API的消费者: 请求是否如预期的成功,或者失败 如果出现了错误 ...
- PAT 甲级 1037 Magic Coupon
https://pintia.cn/problem-sets/994805342720868352/problems/994805451374313472 The magic shop in Mars ...
- myEclipse如何将程序部署到tomcat(附录MyEclipse调试快捷键)
部署 1.选中你要部署的项目,在工具栏找到 Deploy MyEclipse J2EE Project to Server 2.单击Add,即出现如下界面.选择相应的Server,要和你在配置tomc ...
- centos7安装Logwatch配合msmtp邮件客户端发送服务器监控分析日志
########################### #DATE 2016-07-29 # #Authur by Denilas Yeung ...
- Sockt编程(多线程)
服务器端: package com.zeph.serverclient; import java.io.BufferedReader; import java.io.IOException; impo ...
- hdu 1534 Schedule Problem (差分约束)
Schedule Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- [bzoj5287] [HNOI2018]毒瘤
题目描述 从前有一名毒瘤. 毒瘤最近发现了量产毒瘤题的奥秘.考虑如下类型的数据结构题:给出一个数组,要求支持若干种奇奇怪怪的修改操作(比如区间加一个数,或者区间开平方),并支持询问区间和.毒瘤考虑了n ...
- Spring Boot RabbitMQ 延迟消息实现完整版
概述 曾经去网易面试的时候,面试官问了我一个问题,说 下完订单后,如果用户未支付,需要取消订单,可以怎么做 我当时的回答是,用定时任务扫描DB表即可.面试官不是很满意,提出: 用定时任务无法做到准实时 ...