运行环境:Python 3
代码编写工具:VSCode,PyCharm
代码启动选项:
udpclient.py启动时必须附加启动参数:server_ip、server_port和file_path。- 启动后,程序会自动读取指定路径的文件,并使用自定义的可靠传输协议向服务器发送。
udpserver.py启动时必须附加启动参数:server_port,用于指定服务器网络监听的具体端口号。
文件目录结构:
| 文件名 | 作用 |
|---|---|
logger.py |
日志文件处理模块 |
reliableudp.py |
自定义的基于 UDP 可靠传输协议模块 |
udpclient.py |
UDP 可靠传输客户端程序 |
udpserver.py |
UDP 可靠传输服务器程序 |
各文件具体作用:
-
logger.py:定义了日志文件的处理机制,供其他模块调用。日志输出格式包含执行时间、记录等级与具体行为内容。客户端运行日志默认写入
run_log.txt,服务器端日志默认写入run_log_server.txt。 -
reliableudp.py:核心的基于 UDP 实现的可靠传输层协议模块。为了弥补原生 UDP 的不可靠性,该模块进行了以下封装设计:
- 定义了 4 种底层通讯报文类型:
_TYPE_INIT(连接握手请求)、_TYPE_ACK(确认回复)、_TYPE_DATA(数据报文)以及_TYPE_FIN(通信结束标志)。 - 设计了带有专属校验(利用学号和校验码进行连接认证)的握手流程,拦截非法数据包。
- 内部实现了超时重传(分包重发阈值控制)、动态滑动窗口(大小限制 400)等关键机制,保障数据不丢失。
- 为外界提供类似 TCP 的调用接口:
connect()(连接服务器)、bind()/accept()(监听握手)、send()和recv()(数据收发)。
- 定义了 4 种底层通讯报文类型:
-
udpclient.py:客户端可执行程序。主要流程包括:
- 解析命令行输入的服务器信息(IP、端口)与本地文件路径。
- 实例化
ReliableUDP,发起针对服务器的三次握手(连接)。 - 连接建立后,将目标文件以二进制(
rb)模式进行读取并交由ReliableUDP可靠传输通道发往远端服务器。
-
udpserver.py:服务器端可执行程序。主要流程包括:
- 解析命令行输入的监听端口号。
- 实例化
ReliableUDP并通过bind方法监听该端口。 - 通过循环持续挂起
accept操作,等待合法客户端连接校验;连接达成后转入recv操作,可靠地接收客户端传输的完整文件。