一、TFTP协议
1.概念
TFTP(Trivial File Transfer Protocol,简单文件传输协议)
是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议
2.特点
- 简单
- 占用资源小
- 适合传递小文件
- 适合在局域网进行传递
- 端口号为69
- 基于UDP实现
3.信息交互
- (1)C端向S端的69号端口发送读写请求
- (2)服务器批准该请求,则创建一个新的临时端口进行数据的传输
- (3)S端发送数据的格式:2字节操作码+2字节序号+数据
操作码
操作码 | 功能 |
---|---|
1 | 读请求,即下载 |
2 | 写请求,即上传 |
3 | 表示数据报,即data |
4 | 确认码,即ACK |
5 | 错误 |
TFTP数据报格式
struct模块用来将Python数据结构转换为C数据结构
二、TFTP协议的Socket编程
(一)TFTP的服务器端代码
from socket import *
import struct
#服务器端的socket
s = socket(AF_INET,SOCK_DGRAM)
#绑定IP和端口号
s.bind(('',69)) #注意:此处需要将IP地址和端口号先封装成一个元组
def download(filename,client_ip,client_port):
#创建一个新的socket,负责发送包含文件内容的数据报给客户端
new_socket = socket(AF_INET,SOCK_DGRAM)
#文件内容数据报的计数器,起始就是发送数据包块的编号
num = 1
#定义服务客户端退出的标签
flag = True
try:
f = open(filename,'rb')
except: #捕获所有异常
#H表示Python的inte转成C的无符号的short
#5s表示把Python中包含5个字符的字符串转成C中的字符数组
error_package = struct.pack('!HH5sb',5<