基于 flask 的简单聊天室 之Python

基于 flask 的简单聊天室 一,系统功能 用户登录功能 用户发送信息功能 提供可视化图形界面 二,相关技术 使用了 python GUI 类库 中的图形化界面 多任务线程 网络编程 数据库编程 三

本文包含相关资料包-----> 点击直达获取<-------

基于 flask 的简单聊天室

一、系统功能

用户登录功能

用户发送信息功能

提供可视化图形界面

二、相关技术

使用了 python GUI 类库 中的图形化界面

多任务线程

网络编程

数据库编程

三、总体设计

项目概述:

聊天室是一款 C/S(客户端/服务器端)模式的软件,包含了服务器端程序和客户端程序两部分,客户端发送聊天信息到服务器,服务器将信息转发给其他在线登录的用户。

客户端 john 《----接收《--------

客户端 edward 《-----接收《--------- 服务器

用户端 smith ------》发送---------》

项目环境:

c++ Window10 + python3.7 + pycharm

项目模式:C/S 模式

所用技术:1.python GUI 类库

多任务线程

网络编程

数据库编程

项目架构:

需要的类库:

c++ PYMYSQL 0.10.1 PIP 20.2.4 Flask 1.1.2 config 0.5.0post() coverage 5.3 Scipy 1.5.4

四、详细设计

客户端:

登录界面:

聊天界面:

服务器端:

作为服务的提供者,负责用户的登录验证,聊天信息转发。

服务端程序工作任务让服务器程序保存所有在线用户的链接,只需要将信息发送给服务器程序,服务器程序负责转发给其他用户服务器 (地址固定)

客户端 john 客户端 edward 客户端 smith

业务逻辑:

开始

创建套接字并监听指定端口

开启线程处理当前客户端请求

多任务线程并发技术

接收客户端请求并判断请求类型

登录请求处理 聊天请求处理

退出

响应协议设计:(通信格式的设计)

为了实现客户端和服务器端之间的通信,约定给客户端发送什么哥是的数据给服务器,服务器又需要返回什么样格式的数据给客户端,客户端会有不同的请求,所以针对不同的请求和响应定义了响应编号,来区分不同的请求和响应。

登录响应格式:”1001|ret|nickname|username”

ret 代表服务器端验证的结果,如果是字符‘0’,则表示服务器端验证失败,后面的 nickname username 会为空字符串,如果 ret 的值是‘1’,表示服务器端验证成功

nickname 为服务器返回的该用户昵称

username 为该用户的用户名。

聊天响应格式“1002|nickname|messages”,nickname 为聊天信息发送者的昵称,messages 为其发送的聊天信息

conflg.py 模块:

定义了服务器需要的一些变量,为实现客户端和服务器端通信而定义的一些数据协议编号,协议编号定义:

```python

数据协议相关配置

REQUEST_LOGIN =’0001’ #登录请求 REQUEST_CHAT = ‘0002’ #聊天请求 RESPONSE_LOGIN_RESULT = ‘1001’ #登录结果响应 RESPONSE_CHAT = ‘1002’ #聊天响应 DELIMITER = ‘|’ #自定义协议数据分割符 ```

Response_protocol.py 模块(响应协议):

定义一些快捷函数用来生成快捷函数 来生成对应格式的响应数据

```python

服务器配置

SERVER_IP = '127.0.0.1' SERVER_PORT = 8090 ```

五、运行结果

阶段一:测试 服务器启动,以及收发消息

启动服务: ---》启动测试

阶段二: 代码优化

套接字封装 优化

服务器通过套接字,及逆行传输数据,进行代码优化

线程优化:

第三阶段 多任务 子线程阶段:

  • 有客户端--》服务器
  • 编程 客户端--》子线程--》 服务器 -- 》客户端
  • 服务器端

客户端:多开

结果:

1 号

2 号

3 号

阶段四:解析数据:

客户端给服务器发送的消息格式:

客户端:

服务器:

对服务器进行优化:对信息进行切割处理:

存入字典的信息,根据切割,划分为不同的信息段,进行不同的操作。

客户端:

服务器端:

阶段五

登录请求的处理:

服务器:

客户端:

  • 阶段六
  • 数据库阶段: 引入 pymsql 库 引入 config 配置文件
  • 数据库链接

获取数据库信息:

测试数据:

阶段七

用户登录检查:

服务器链接数据库:进行测试操作

服务器:

客户端:

用户下线处理:

服务端:

客户端:

用户信息转发:

客户端:

服务器:

阶段八:

用户登录界面设置:

使用 python GUI 自带的组件

按钮的响应:

测试重置:

点击重置:

阶段九

客户端链接数据库并给服务器发送信息测试链接数据:

连接成功的案例

服务器:

客户端:

链接失败的案例

客户端:

注意看协议的返回状态。

阶段十

开启客户端消息线程:

服务端:

客户端:注意 result 的值 状态变化

正确

失败:

阶段十一:

发送消息界面:

六、心得体会

学习知识

了解到后端,客户端,与服务端之间的区别

明白了协议的生成与书写

学会使用 python GUI 界面

理解多线程的使用

学会了链接数据库,进行验证

学会了字典与列表组合并进行切分,来获取内容,并封装在另一个字典中

学会了项目文件的封装

学会了适当的优化代码,提高代码的可阅读性,以及可拓展性

学会了对重复使用代码进行封装优化

学会了如何使用弹窗,以及对界面进行隐藏

后期拓展:

将所有配置信息书写在一个 config.py 文件中,有利于拓展维护。

使用 if 判断,进行判断事件的类型,方便后期代码的拓展。目前只能发送文字信息,因为定义的协议处理中,缺少图片协议。

对于程序后期功能的拓展

目前只有两个功能,使用 if / elif 但是后期增加功能不方便,修改如下

修改后:

遇到的问题

错误提示重述:

Python 报“TypeError: a bytes-like object is required, not ‘str’ ”解决办法

解决办法非常的简单,只需要用上 python 的 bytes 和 str 两种类型转换的函数 encode()、decode()即可

【python】ExceptioninthreadThread-1:Traceback(mostrecentcall...

七、参考资料

CSDN:

c++ CSDN: CSDN:

附页

数据库代码:

c++ CREATE DATABASE mini_chat; use mini_chat # 使用 mini_chat CREATE TABLE user( user_id INT NOT NULL AUTO_INCREMENT, user_name VARCHAR(15) CHARACTER SET utf8 NOT NULL, user_password VARCHAR(15) CHARACTER SET utf8 NOT NULL, user_nickname VARCHAR(15) CHARACTER SET utf8 NOT NULL, PRIMARY KEY(user_id) ); INSERT into user VALUES(0,'user1','111111','itcast1'); INSERT into user VALUES(0,'user2','111111','itcast2'); INSERT into user VALUES(0,'user3','111111','itcast3'); SELECT * FROM user; DROP DATABASE mini_chat;

参考文献

  • J2EE平台下快速WEB开发的研究与应用(武汉理工大学·李涛)
  • 基于J2EE的辽油通信小灵通服务下载系统的设计与实现(电子科技大学·吴文哲)
  • 基于.NET自定义控件的社区网站系统研究与实现(武汉理工大学·刘亚)
  • 手机软酷网即时通讯软件的设计与实现(电子科技大学·齐迎旭)
  • 基于Web下的远程教学系统的设计与实现(吉林大学·王骥)
  • J2EE平台下快速WEB开发的研究与应用(武汉理工大学·李涛)
  • 基于.NET自定义控件的社区网站系统研究与实现(武汉理工大学·刘亚)
  • 基于SSH框架的博客用户分享平台的设计与实现(河北工业大学·刘磊)
  • WEB QQ——基于JMS技术并集成在服务器端的即时通讯系统(成都理工大学·李健)
  • J2EE平台下快速WEB开发的研究与应用(武汉理工大学·李涛)
  • 基于J2EE的辽油通信小灵通服务下载系统的设计与实现(电子科技大学·吴文哲)
  • 基于SSH框架的博客用户分享平台的设计与实现(河北工业大学·刘磊)
  • IOS平台上基于SIP协议的即时通讯软件设计与实现(浙江工业大学·王金龙)
  • 理财论坛的设计与实现(吉林大学·王雷)
  • 基于FMS的校园即时通讯系统设计与实现(苏州大学·方蓓)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设小屋 ,原文地址:https://bishedaima.com/yuanma/35959.html

相关推荐

  • 基于WEB的疫情期间社区出入管理系统

    基于 Web 的疫情期间社区出入管理系统的设计与实现 摘要: 随着互联网的发展,“线上化”已经成为常态,如何方便快捷的为用户提供服务的问题越来越突出
    2024年05月14日
    4 1 1
  • 基于Java Web的投票管理系统

    基于Java Web的投票管理系统 摘 要 相较于传统投票方式,在线投票是任何一-次商演(时间短,影响范围小),电视(投入大,效果不明显)或者户外广告(不能快速吸引消费者眼球)在投入产出效率上都难以企及的
    2024年05月14日
    5 1 2
  • 构造正规式r1|r2

    近年来,随着计算机科学领域的迅速发展,正规式与自动机理论作为编译原理等诸多领域的基础,备受关注,在编写程序中,正规式的构造是一项常见而且关键的任务,特别是在涉及到复杂文本匹配与处理的场景下
    2024年05月07日
    12 1 4
  • 基于Springboot+Mybatis和Oracle实现的医院预约挂号系统

    基于SpringBoot+Mybatis和Mysql实现的选课管理系统 一,引言 计算机技术高度发达的今天,利用信息技术对大量复杂的信息进行有效的管理成为一种普遍而实用的手段
    2024年05月14日
    7 1 3
  • 基于JSP和SQL Server 2012的网上书店系统

    基于JSP和MySQL的图书城系统 1 开发背景 1,1 系统开发背景与意义 本着计算机技术在各行各业日益广泛和深入的应用,网络的概念早已深入人心
    2024年05月14日
    20 1 4
  • 网上购物商城系统研发

    这是一个🔥🔥基于SpringBoot框架的网上购物商城系统研发设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    7 1 2
  • 基于SpringBoot框架的医护人员排班系统

    这是一个采用🔥🔥SpringBoot核心框架构建的医疗人员排班管理系统源代码,编程语言为Java,该项目巧妙融合了SpringBoot技术和Vue,js前端框架,开发工具涵盖Idea或Eclipse
    2024年05月23日
    5 1 2
  • 基于安卓的备忘录应用开发实现

    在移动设备普及的今天,人们对于随时随地记录重要事项和想法的需求日益增加,基于安卓平台的备忘录应用成为了满足这一需求的重要工具,本研究旨在开发一款基于安卓的备忘录应用,使用户能够方便地记录
    2024年05月07日
    17 1 3
  • 基于javaweb+fullcalender.js的排班管理系统源代码

    这是一个🔥🔥基于javaweb的排班管理系统源代码🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 排班管理系统开发技术栈为SSM项目,可以作为毕业设计课程设计作业基于JavaWeb即使开发实现一个排班系统
    2024年05月23日
    4 1 1
  • 基于Jsp和Mysql的教务管理系统

    基于Jsp和MySQL实现的教务信息管理系统 基于Jsp和MySQL实现的教务信息管理系统# 一,引言 随着信息技术的革命与发展,计算机已经成为我们学习和工作的得力助手
    2024年05月14日
    26 1 2

发表回复

登录后才能评论