你是否想过用所学的Python开发一个图形界面的聊天室程序啊?

像这样的:

如果你想开发这样一个有点怀旧风格的聊天程序,那么可以接着看;

要开发这个聊天程序,你需要具备以下知识点:

  • asyncore 、asynchat模块使用
  • wxPython 图形开发

这个聊天程序的实验原理如下:

由于 Python 是一门带 GIL 的语言,所以在 Python 中使用多线程处理IO操作过多的任务并不是很好的选择。同时聊天服务器将同多个 socket 进行通信,所以我们可以基于 asyncore 模块实现聊天服务器。

aysncore 模块是一个异步的 socket 处理器,通过使用该模块将大大简化异步编程的难度。asynchat 模块在 asyncore 模块的基础上做了进一步封装,简化了基于文本协议的忘了通信任务的开发难度。

既然要开发聊天程序,那必然需要设计聊天时使用的协议。为了简单起见,我们将要开发的聊天服务器只支持文本协议,通过command message的方式调用相关的操作。比如如果客户端发送以下文本,将执行相应的操作

# 登录操作
login\n
# 在聊天室中发表 hello 内容
say hello\n
# 查看聊天室在线用户
look\n
# 退出登录
logout\n

以上协议流中,login, say, look, logout 就是相关协议代码。

开发步骤如下:

  • 1、服务器类:一个聊天服务器类,通过继承 asyncore 的 dispatcher 类来实现;
  • 2、 会话类:有了服务器类还需要能维护每个用户的连接会话,这里继承 asynchat 的 async_chat 类来实现;
  • 3、协议命令解释器:聊天服务器的协议,具体来说就是处理用户登录,退出,发消息,查询在线用户的代码;
  • 4、房间:实现聊天室的房间了,这里我们定义了三种房间,分别是用户刚登录时的房间、聊天的房间和退出登录的房间;
  • 5、登陆窗口:实现客户端了;
  • 6、聊天窗口:聊天窗口中最主要的就是向服务器发消息并接受服务器的消息;

嗯,什么?光看这个原理和开发步骤还是不会具体的开发,不会写代码?那我给你详细的开发教程,看么?!

【python 实现文字聊天室】

这个教程详细的介绍了开发步骤和开发代码,带你一步一步的实现这个文字聊天室,而且还有在线开发环境,你可以跟着动手去操作哦;

Python实现文字聊天室的更多相关文章

  1. python模拟QQ聊天室(tcp加多线程)

    python模拟QQ聊天室(tcp加多线程) 服务器代码: from socket import * from threading import * s = socket(AF_INET,SOCK_S ...

  2. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  3. 如何用Python编写一个聊天室

    一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...

  4. Python Socket 编程——聊天室演示样例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...

  5. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  6. Python Socket 简单聊天室1

    这是第一版,最简单的,仅仅实现了通信,你收我发,我收你发而已.下篇将介绍,基于异步多线程的聊天室: 客户端: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  7. Python多人聊天室

    一.目的 以实现小项目的方式,来巩固之前学过的Python基本语法以及相关的知识. 二.相关技术: 1.wxpython GUI编程 2.网络编程 3.多线程编程 4.数据库编程 5.简单的将数据导出 ...

  8. 基于select的python聊天室程序

    python网络编程具体参考<python select网络编程详细介绍>. 在python中,select函数是一个对底层操作系统的直接访问的接口.它用来监控sockets.files和 ...

  9. Python聊天室

    小编心语:锵锵锵!各位看官注意了啊,走过路过表错过!上篇博文主要介绍了基于基于Server-Sent Event的简单在线聊天室,相信不管各位是大牛.小牛还是跟小编一样的小白,可能觉得看得不够过瘾,区 ...

随机推荐

  1. Jumpserver堡垒机

    堡垒机介绍 搭建简易堡垒机 安装步骤 wget --no-check-certificate https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.b ...

  2. 具有键“XXX”的 ViewData 项属于类型“System.Int32”,但它必须属于类型“IEnumerable<SelectListItem>

    原因是Edit视图中有@Html.DropDownListFor(m => m.BirthdayAD... 但是没有从Controller中没有设置值

  3. CountDownLatch简单使用

    CountDownLatch介绍 CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过 ...

  4. HQL之动态分区调整

    动态分区插入可以基于查询语句分出出要插入的分区名称.比如,下面向分区表插入数据的SQL: insert into table chavin.emp_pat partition(dname,loc) s ...

  5. linux:基本指令mkdir, rmdir 和rm

    mkdir 建立文件夹 mkdir (make directory) 就是创建一个文件夹的意思, 使用起来很简单. 1.新建一个目录: $ mkdir folder2 如果你想在这个目录给 folde ...

  6. RabbitMQ的Q&A

    默认的IP端口 amqp默认绑定IP(本机所有IP),端口:5672 clustering默认绑定IP(本机所有IP),端口:25672 RabbitMQ Management插件 (本机所有IP), ...

  7. mysql 正确清理binlog 删除数据后磁盘空间的

    (3条消息)MySQL删除数据后磁盘空间的释放情况 - ZERO - CSDN博客 https://blog.csdn.net/zero__007/article/details/51404091 m ...

  8. [daily] 在CentOS7中使用 sanitizer-address 发现内存问题 / CentOS7使用SCLo软件源安装devtoolset软件

    接前文: [daily] 内存越界的分析与定位 如前文提及, 使用sanitizer-address 可以有效的检查程序的内存问题. 当时在CentOS7中,虽然也可以使用,但是却遇到如下两个问题: ...

  9. LeetCode 937 Reorder Log Files 解题报告

    题目要求 You have an array of logs.  Each log is a space delimited string of words. For each log, the fi ...

  10. LeetCode 806 Number of Lines To Write String 解题报告

    题目要求 We are to write the letters of a given string S, from left to right into lines. Each line has m ...