21秋计算机网络小学期——UDP服务器的设计(Python)

21秋计算机网络小学期——UDP服务器的设计(Python)

本程序是我都小学期作业,内部肯定存在很多不是最合适的代码跟算法,望大佬指正。

最终成品链接

本文已经迁移到个人博客,博客链接:http://blog.zhuanjie.ltd/
本文链接:计算机网络小学期——UDP服务器的设计

题目及要求

UDP是TCP/IP协议族为传输层设计的两个协议之一,是一种无连接的,不可靠的协议。由于UDP采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。UDP适合一些实时的应用,如IP电话、视频会议,它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据,但是延迟不能太大。基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。编写一UDP服务器程序,流畅地完成视频文件地传输,要能对多个客户端进行管理。需要通过UDP模拟多个客户端连接验证的情况。

设计思路

工具

a) 编译环境:Python3.10
b) 编译工具:PyCharm
c) 打包工具:pyinstaller

调用函数库

a) time:处理时间的标准库,提供获取系统时间并格式化输出功能
b) socket:帮助在网络上的两个程序之间建立信息通道
c) queue:提供队列操作的模块,用于多个线程之间的数据共享
d) basename:去掉目录路径,单独返回文件名

解决问题思路

本程序由于需要在网络上搭建UDP服务器来传输信息、文件,则必须要定义一个合适的确认连接以及检验文件完成性的功能。
以TCP传输模式为样例,本程序的服务器端和客户端采用了类似TCP的三次握手确认连接和四次挥手断开连接。
本程序采用类似FTP传输模式,利用6000端口来传送控制信息以及一些普通消息,利用7777端口来传输文件信息,利用7778端口来接收ack数据包确认信息。

流程图

服务器端流程图

服务器端流程图

客户端流程图

客户端流程图

详细设计

函数列表

所处位置函数名参数描述
服务器端sendto传输文件名称,客户端套接字用于传输文件
服务器端recv_ack确认客户端返回的确认信息
服务器端sendOne消息,发送到的客户机的套接字整合发送一条udp消息到指定套接字
服务器端circlesend发送到的客户机的套接字循环发送消息到客户端(基于聊天功能)
服务器端getfire文件路径,发送到的客户机的套接字获取文件函数,用于启动发送文件进程和确认客户端返回的确认进程
服务器端mafun消息,发送到的客户机的套接字默认命令消息处理函数
服务器端diviceConnect发送到的客户机的套接字连接到服务器后的设备所启动线程调用的函数
服务器端receive接受消息并将消息送到管道
客户端getFile文件名获取文件路径,名称
客户端receive接受消息
客户端circlesend发送消息

运行结果

多客户端连接服务器模拟
运行结果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值