你是否想过用所学的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. MFC接收命令行参数的三种方法

    方法一: CString sCmdline = ::GetCommandLine(); AfxMessageBox(sCmdline); 将获取到 "C:\test\app.exe -1 - ...

  2. 在移动端如何用swiper实现导航栏效果

    我们在写移动端的时候会有滑动和点击导航后滑动到目标页面功能:而这个功能如果自己写的话会很麻烦,所以我在这推荐一下swiper这个插件. 其实swiper中的官网中也有这种功能的实现,但是我认为是有点麻 ...

  3. python3.6利用pyinstaller模块打包程序为.exe可执行程序

    步骤: 1.安装pyinstaller模块:(必须在联网情况下进行) 操作原理: python3.6已经自带了pip,所以只需要在cmd中执行 pip install pyinstaller 就可以安 ...

  4. mysql distinct 后面没有括号

    当distinct应用到多个字段的时候,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面 如下语句是错误的: SELECT country, di ...

  5. [No0000E4]C# 常量

    常量是固定值,程序执行期间不会改变.常量可以是任何基本数据类型,比如整数常量.浮点常量.字符常量或者字符串常量,还有枚举常量. 常量可以被当作常规的变量,只是它们的值在定义后不能被修改. 整数常量 整 ...

  6. ruby-from-other-languages

    http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/ http://www. ...

  7. >>>>>>>> [ovs][libvirt] virt-xml ovs-vsctl

    查看可用的参数: [root@vrouter1 tong]# virt-xml --add-device --network=? |grep source source source_mode sou ...

  8. PLSQL分级取数据

    分级取数据 select employee_id,last_name,job_id,manager_id from employees start with employee_id=101 --emp ...

  9. 20165336 2016-2017-2 《Java程序设计》第9周学习总结

    20165336 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 1.URL类:URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称作 ...

  10. js阻止默认事件,如a标签跳转和事件冒泡

    禁止a标签点击跳转 <a href="http://baidu.com" onclick="return false">点我啊</a> ...