多人聊天室

基于python面向对象多人聊天室流程

项目环境

  • 项目环境
    • 项目名称:多人聊天室
    • 项目模式:C/S
    • 开发环境:win10+python3.6+pycharm
    • 所需知识:python GUI编程,多线程编程,网络编程,数据库编程

程序设计

了解一下服务器扮演的角色,下面是服务器的业务流程。大致是怎样工作的

  • 首先服务器在指定的端口进行监听,等待客户的链接
  • 客户端链接到服务器之后,服务器开启单线程来处理该用户的请求
  • 处理线程等待客户端发送的请求
  • 服务器根据客户端请求类型的不同,调用不同处理的函数
  • 处理完客户端请求之后,再次回到第三步继续等待处理客户端新的请求

客户端退出登录,服务器也会关闭对客户端的处理线程,释放资源

响应协议设计

我们都知道三次握手和四次挥手,这里呢我们约定了客户端发送什么样格式的数据给服务器,服务器又需要返回什么样格式的数据给客户端,客户端会有不同的请求,所以我们针对不同的请求个响应定义了需求个相应号,来区分不同的请求和响应

网络上一般使用json和xml格式来传输数据,但是用他们来传输,对于我们的项目有点复杂,我们的项目没有这么复杂的数据,我们采用 |进行分割 ,然后拿到数据进行 split一下就可以了。

  • 登录响应格式: 1001|ret|nickname|username,其中 ret 代表服务器端验证的结果,如果是 0,表示服务端验证失败,后面的nickname username 会为空字符串,若是 1 ,表示服务端验证成功,nickname 为服务端返回的该用户的昵称, username 是该用户的用户名。
  • 聊天的响应格式:1002|nickname|message, nicakname 是为聊天信息发送者的昵称, message 是发送的聊天信息

下面我们定义了服务端需要的一些常量,以及为了实现客户端和服务端通信定义的一些协议编号,协议编号如下

config.py
# ----服务器相关配置----
SERVER_IP = '127.0.0.1'  # 服务器IP地址
SERVER_PORT = 8090  # 服务器端口号

# ----数据协议相关配置----
REQUEST_LOGIN = '0001'  # 登录请求
REQUEST_CHAT = '0002'  # 聊天请求
RESPONSE_LOGIN_RESULT = '1001'  # 登录结果响应
RESPONSE_CHAT = '1002'  # 聊天响应
DELIMITER = '|'  # 自定义协议数据分隔符

面向对象的思想

界面展示

posted @ 2020-05-06 19:39  小子,你摊上事了  阅读(428)  评论(0编辑  收藏  举报