社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

肝了一夜!我用Python打造了一款武林外传QQ聊天室

菜鸟学Python • 4 年前 • 495 次点击  

公众号 “菜鸟学Python

439篇原创,设为 “星标”,一起学Python!



大家在平时的学习或者是生活中,想必都少不了群聊,无论是微信还是QQ,都有群聊的内容,有的时候想打造一个小团体专属的聊天室,不被服务器记录信息,这样的小工具其实Python就可以轻松办到,大概100-200行代码即可完成。


今天小编就带领大家利用Python来打造一款局域网下的聊天室,小编是武林外传的铁粉,干脆用武林外传的人物来打造一个虚拟的聊天室,给大家展示一下。


01.原理介绍

今天用到的库大部分都是Python的内置库,唯一一个需要额外安装的库是Pillow库。安装的方式也非常的简单,只要运行pip3 install Pillow即可完成安装,用的Python的版本是Python3.7版本。

局域网下,大家可以简单的理解为只要大家所使用的网都是基于一个 路由器出来的网络信号就可以。而微信聊天室的基本原理,可以用下面的图来简单的解释:

程序设计思路图

上图中主要分为服务器端和客户端两个部分:

  • 服务器端只存在一个,而可以存在多个客户端;

  • 客户端与服务器端之间存在信息的交互,客户端将信息发送给服务器端后;

  • 服务器将收到的信息群发给每一个客户端;

这样就可以在每个客户端中显示群聊的信息,实现聊天室的功能。


02.程序设计

对于核心原理有一个简单的认识之后,接下来我们来看一下,服务器端和客户端程序是如何实现吧。

01).服务器设计

首先我们来看一下服务器端的程序,从上面的原理介绍中可以看出,我们的核心是利用Python来进行网络编程,而在Python中,网络编程则离不开socket库的使用,如下图所示:

程序首先利用socket库来建一个服务器,然后服务器开始对客户端进行监听,当有客户端接进来的时候,则创建一个新的线程来处理客户端的信息,每一个新的线程都处理一个self.chat 函数,如下图所示:

上图中,brodCast函数的作用是向每一个客户端进行信息的传递,而在self.chat函数中,首先获取用户的姓名信息,并在聊天室中打印出欢迎用户进入聊天室。然后再while循环中,不断的获取客户端的信息并向所有的客户端进行广播。
以上就是服务器端程序的作用,接下来我们再来看一下客户端的程序。


02).客户端的设计

客户端由于涉及到了用户的界面设计,所以程序上会比较繁琐一点,首先是用户登录系统的设置。

上述的用户窗口程序作用是用来进行用户的登录信息的验证,其效果图如下所示。


当用户输入用户名和密码之后,程序会调用check函数来进行验证,是否正确,如果程序正确的话,则会正常进行聊天室,否则程序会提示错误,程序退出。

当我们正常进入聊天室后,聊天室的页面布局如下图所示。



聊天室中,画面最上方是聊天室的信息内容展示窗口,而中间的是用户的聊天信息输入窗口,位于左下角的则是信息的发送按钮。对于聊天室的界面构造,我们同样是利用tkinter进行构造的,大家可以下载源码来进行更加仔细的了解。这里,“发送”按钮绑定的是send函数 ,如下图所示:


在send函数中,函数获取用户的输入信息,并将信息发送给给服务器端,而上面的get_msg函数,则是用来接收服务器端发来的信息,并将信息显示在聊天室的窗口中。

03.视频展示

以上的程序便是服务器端和客户端的程序内容的展示,接下来我们运行一下程序进行结果的展示吧。


好了,今天的聊天室程序就讲到这里,Python就是这么有趣好玩,如果你觉得“武林外传”这个聊天室名字不过瘾,你可以起其他的“星球大战”,“海贼王”你喜欢的名字,反正你的程序你做主,嘿嘿~~

如果您觉得本篇对你有用,可以收藏或者转发给有兴趣学Python的同学,原创不易记得来个三连哦!
如何获取源码:
需要源码的同学,后台输入:小助手,找他拿,备注:聊天室。
再次感谢!我是菜鸟哥,我们下篇见!




程序员GitHub,现已正式上线!


接下来我们将会在该公众号上,专注为大家分享GitHub上有趣的开源库包括Python,Java,Go,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。





年度爆款文案



点这里,获取新手福利

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/106865
 
495 次点击