# 简易微信实验报告
# 一、简易微信系统的总体设计
## 1.1 服务器:
服务器负责管理数据库与处理接收到的指令。服务器在启动时将保存在硬盘上的数据库备份读入内存,开始等待接收指令。
对于每一个处理指令的周期,服务器首先按照相同的IP地址与端口号创建一个UDP套接字,并在对数据库的操作执行完毕后,向本条指令的发送方发送返回信息,最后关闭套接字。
针对数据库的操作可分为三层:其一是对数据表在内存层面上进行的数据项的获取、插入、删除以及判断存在性的底层操作;其二是针对微信的具体功能设计的对底层操作的封装,这一层使用存在性判断函数为底层操作规避了内存访问的潜在错误;其三是为具体指令服务,完成功能层面的数据库访问的服务器顶层。
图1 **服务器结构示意图**
![](https://www.writebug.com/myres/static/uploads/2022/7/13/eea65e91fff492ee2a522f569ec3192d.writebug)
如图1所示,服务器顶层与socket接口均在server.py文件中实现,而功能安全层和数据库底层分别在manage.py和database.py文件中实现。
## 1.2 客户端:
客户端是由多个由点击事件所触发的窗口所组成的。在启动客户端之初,首先将全部窗口初始化,并打开登录窗口。此外的全部窗口以及所有通信行为都是由现有窗口中的按钮点击所触发的。
在点击有关发送数据按钮时,首先根据所要求的功能和数据生成指令,然后创建UDP套接字,向已指定位置的服务器发送指令,接收返回信息并关闭UDP套接字,最后显示之或是根据之进行判断。
客户端的窗口都是系统窗口的实例,点击右上角的关闭按钮,就可以在任何时候强制地关闭窗口,当最后一个窗口关闭时,系统窗口的实例化进程结束,客户端程序结束。
# 二、协议设计和系统设计
## 2.1 通信协议:
为规范客户端向服务器发送指令以请求服务的处理过程,定义如下指令集。(原文档见cmd_format_v6.txt)
regu_账号_* * * _密码_名字_***:
要求服务器在数据库中添加一条用户信息,包括账号、密码和名字三部分。
lgin_账号_* * * _ 密码_ * * * _***:
要求服务器比对(账号,密码)是否存在,若存在则返回‘1’,否则返回‘0’。
mkfa_ 账号1_ 账号2_***_***_***:
要求服务器在通知列表中添加一条信息,表示账号1向账号2发送了好友请求。
mkf_ 账号1_ 账号2_***_***_***:
要求服务器在好友列表中添加(账号1,账号2)和(账号2,账号1)两条信息。
dlf_ 账号1_ 账号2_***_***_***:
要求服务器在好友列表中删除(账号1,账号2)和(账号2,账号1)两条信息。
sdm_ 账号1_ 账号2_***_***_文字信息:
要求服务器在消息列表中添加一条信息,表示账号1向账号2发送了文字信息,并设置其时间戳为当前时间。
swm_ 账号_***_***_***_***:
要求服务器将消息列表中所有时间戳距现在不超过30分钟的数据项返回。
swf_ 账号_***_***_***_***:
要求服务器将好友列表中所有左项是账号的数据项返回。
swfa_ 账号_***_***_***_***:
要求服务器将通知列表中所有左项是账号的数据项返回。
## 2.2 系统设计:
在数据库底层,定义了获取用户列表数据项、获取好友列表数据项、获取消息列表数据项、获取通知列表数据项、插入用户列表、插入好友列表、插入消息列表、插入通知列表、删除用户列表数据项、删除好友列表数据项、删除通知列表数据项、判断指定用户列表数据项是否存在以及判断指定好友列表数据项是否存在的函数。(见database.py)
在功能安全层,定义了注册、登录、添加好友、删除好友、显示好友、发送消息、发送通知、获取消息以及获取通知的函数。(见manage.py)
在服务器顶层,设置一个循环,循环的每一次迭代是指令处理的一个周期,并设置每经历20个周期将数据库备份一次。(见server.py)
在客户端中,将每一个窗口定义一个类,并分离类中的构造函数与启动函数(见GUI.py),早客户端启动时运行全部实例的构造函数,但只在特定点击事件发生时才运行实例的启动函数。(见client.py)
# 三、协议和系统实现
## 3.1 协议实现:
在server.py文件中,服务器首先获取指令的第0字段,并据此进入不同的程序分支,调用功能安全层的函数并处理数据,然后将结果添加于返回值变量,最后由UDP套接字发送。
## 3.2 系统实现:
在系统正常运行的过程中,多个客户端可同时保持运行状态,每一个客户端的信息都来自客户端向服务器发送的指令的回复信息,如好友列表和消息列表。在服务器端,服务器根据指令到达的先后顺序依次处理指令所要求的操作,并返回数据。
由于服务器的指令处理流程十分扁平化,加之使用UDP协议可以减少一部分时间开销,在实验室条件下完全没有必要担心指令发送冲突,因为服务器有能力在极短的时间内区分出两条几乎同时发送的指令。
如此一来,本系统就使用了单个线程实现了多个用户的异步通信。
# 四、实现结果
## 4.1 注册:
![](https://www.writebug.com/myres/static/uploads/2022/7/13/38953280b38be4527548204757b1085b.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/d1bae6d83e7f857b4d6fb4c957b5b78a.writebug)
## 4.2 登录:
![](https://www.writebug.com/myres/static/uploads/2022/7/13/9351cde4f903f0b90652991a32bc7409.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/3ad8d438240a99e93b596861a990a835.writebug)
## 4.3 发出好友申请:
![](https://www.writebug.com/myres/static/uploads/2022/7/13/3315f4d646083fd733e5f7bbd47b8154.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/df390a863ab25d0864ad83ef36b2b5b1.writebug)
## 4.4 同意添加好友:
![](https://www.writebug.com/myres/static/uploads/2022/7/13/9c363e2c6d6bedcaa77e2297828559fd.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/f5390f3aeeb68ddee03d4a4c10aae548.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/b58ec9b7b44d55eed76e9ca7f0fa39ce.writebug)
## 4.5 发送消息:
![](https://www.writebug.com/myres/static/uploads/2022/7/13/b1cfe801eee837886d1265826d55ef93.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/48e8d2382b841e6b5dc1803472f0dad2.writebug)
## 4.6 发送文件或图片:
![](https://www.writebug.com/myres/static/uploads/2022/7/13/82f4ca370b620c630792e4355de425ed.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/81dc9c706c5952872ac59152a38d77c7.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/13/c5ced10f16047ae172aff3c5e1c9d88c.writebug)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:课程报告word+客户端服务端源码及可执行exe文件 服务器负责管理数据库与处理接收到的指令。服务器在启动时将保存在硬盘上的数据库备份读入内存,开始等待接收指令。 针对数据库的操作可分为三层:其一是对数据表在内存层面上进行的数据项的获取、插入、删除以及判断存在性的底层操作;其二是针对微信的具体功能设计的对底层操作的封装,这一层使用存在性判断函数为底层操作规避了内存访问的潜在错误;其三是为具体指令服务,完成功能层面的数据库访问的服务器顶层。 服务器端的运行与关闭 打开system.py文件,解锁print(system('start/b python server.py')),运行system.py,则服务器开始运行 若解锁print(system('taskkill /im python.exe /f'))并运行system.py,则服务器关闭。 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125782539
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现的简易微信系统.zip (20个子文件)
cmd_format_v6.txt 698B
Client
wechat.exe 1.89MB
__pycache__
GUI.cpython-36.pyc 9KB
client.py 1KB
top_image.jpg 19KB
GUI.py 10KB
Server
server.py 3KB
notice.csv 29B
startup.py 595B
message.csv 73B
__pycache__
manage.cpython-36.pyc 2KB
database.cpython-36.pyc 3KB
database.py 2KB
system.py 137B
manage.py 1KB
user.csv 45B
friend.csv 53B
LICENSE 1KB
课程报告.docx 137KB
README.md 7KB
共 20 条
- 1
资源评论
- WSL出版社2022-08-08资源使用价值高,内容详实,给了我很多新想法,感谢大佬分享~
- 2301_794296632023-12-02非常有用的资源,有一定的参考价值,受益匪浅,值得下载。
shejizuopin
- 粉丝: 1w+
- 资源: 1300
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功