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

仿QQ聊天室项目功能总结 项目源码开源在gitee(码云) 地址:https://gitee.com/xiaoclgitee/imitation-qq-chat-room 项目功能总结: 1、页面制作,采用Java 的Swing的Jframe 的框架进行GUI的制作 主要有三个界面:1、用户登录界面 2、用户聊天窗口界面 3、服务台后台界面 用户的登录界面主要有三个地方:一个是用户名和密码的输入框(用的JTextField),还有两个(JBbutton),一个是注册,另外一个是登录。 假如,我们点击的是注册的功能,这个时候就会 阅读详情

公众号 “菜鸟学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 socket + tkinter实现网络聊天室 个人博客文章链接:http://www.huqj.top/article?id=169 最近突然想用socket做个聊天室程序,之前用java写过一个文件传输的程序,这次就用python做一下,顺便也学习一下python的界面设计。界面库选择了python自带的tkinter。     总的来说聊天室功能比较简单,只是一个练习用的demo,但是其中一些关于tk和socket的东西值得记录一下。... 阅读详情

相关推荐

python编写简单的聊天室(实现私聊功能)

公共模块 首先写一个公共类,用字典的形式对数据的收发,并且进行封装,导入struct解决了TCP的粘包问题,并在公共类中进行了异常处理 import socket,struct,json def send_dic(c,dic): dic_json=json.dumps(dic) dic_json_length=len(dic_json.encode('utf-8')) ...

qq_38980730的博客 1万+

python qq聊天室

1. 群聊聊天室 功能: 类似QQ群功能 有人进入聊天室树要输入姓名,姓名不能重复 有人进入聊天室时,其他人会收到通知: xxx 进入聊天室 一个人发消息,其他人会收到: xxx: xxxxxx 有人退出聊天室,则其他人也会收到通知:xxx 推出了聊天室 扩展功能: 服务器可以向所有用户发送公告:管理员消息:xxxxx 2. 技术点的确定 数据如何流转 转发: 客户端>服务端>其他客户端 网络模型如何构建 构建UDP数据传输 用户信息在哪维护怎么维护 服务端:{name:

jialan75的博客 997

Python网络编程----实现简单的多人聊天室

还是用UDP,socket作为主体来实现,之前我们已经实现过单对单socket通信,这次想实现群发功能 原理其实就是一台服务器在负责分配转发数据,来达成广播的效果,这些思路其实也差不多 但是多人聊天没有这么强的规整性,你可能没等到A的消息,就要去和B说话了,多线程就可以实现这一点 给个链接,感觉写的很好:https://www.cnblogs.com/yeayee/p/4952022.htm...

qq_42192672的博客 2886

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

python模拟QQ聊天室(tcp加多线程) 服务器代码: from socket import * from threading import * s = socket(AF_INET,SOCK_STREAM) s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) s.bind(('',8080)) s.listen(1024) def t_send(): ...

weixin_30361641的博客 382

python聊天室

python socket 图像界面 发送表情 仿QQ

模拟QQ聊天室

模拟了一个简单的聊天室,类似于QQ那种,但是不包含页面,仅仅是后台的实现,主要的采用的知识点就是网络编程和多线程,是服务器和客户端的形式,总之感觉还是挺有趣的一个比较简单的小demo,算是对集合、多线程、IO流读写文件和网络编程的综合运用吧

python核心编程:基于TCP的简易qq聊天室

#coding=utf-8 #客户端代码 from socket import * #创建套接字 tcpSocket = socket(AF_INET,SOCK_STREAM) addr = ("192.168.123.1",7878) #创建连接 tcpSocket.connect(addr) while True: senddata = raw_input("请输入(q退出):") ...

Daniel_WL的博客 630

安卓android+WebSocket实现简易QQ聊天室(前后端代码)

1.原项目地址(安卓端) https://blog.youkuaiyun.com/baidu_41860619/article/details/105267973 2.原项目地址(idea后端) https://blog.youkuaiyun.com/baidu_41860619/article/details/105269617 3.安卓端代码:QQandroid idea代码:qqspringboot

Python Socket,并完成简单的聊天室

Socket是什么? 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力

qq_38449792的博客 1549

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

本地部署llama3Chinese

这通常意味着你的构建环境可能不完整或者没有正确配置。通常是由 Visual Studio 的 C++ 工具提供的。(大模型对错误的解析)错误信息表明在尝试构建一个项目时,在 Windows 上,

m0_49343639的博客 1432

Python 最简单的我的第一个聊天室QQ软件【基于Socket服务】

文章目录什么是SocketPython for socket最简单程序通讯基本函数介绍MyChat原理解释服务端原理代码客户端原理代码使用介绍全局代码 什么是Socket 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口 Socket(套接字)可以看成是两

qq_39935495的博客 2402

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

机器学习-深度学习-图像处理-opencv-段子 5241

python聊天室(tkinter写界面,treading,socket实现私聊群聊查看聊天记录,mysql存储数据)

一、前言 我用的是面向对象写的,把界面功能模块封装成类,然后在客户端创建对象然后进行调用。好处就是方便我们维护代码以及把相应的信息封装起来,每一个实例都是各不相同的。 所有的界面按钮处理事件都在客户端,在创建界面对象是会把客户端的处理事件函数作为创建对象的参数,之后再按钮上绑定这个函数,当点击按钮时便会回调函数 二、登录界面实现 登录界面模块chat_login_panel.py from tkinter import * # 导入模块,用户创建GUI界面 # 登陆界面类 class LoginPane

stormzhuo的博客 3万+

ESP32编译卡在‘Cannot establish a connection to the component registry’?别急着重装,先试试这两个国内镜像配置

本文详细解析了ESP32编译过程中常见的‘Cannot establish a connection to the component registry’报错问题,并提供了国内镜像源的配置方案。通过对比Gitee、清华大学、阿里云和中科大等镜像源的性能,帮助开发者快速解决网络连接问题,提升编译效率。文章还包含手把手的配置教程和进阶技巧,适用于ESP-IDF开发环境的优化。

weixin_34088048的博客 341

UE5 中 Python 编程:Python 代码加载到 UE5 中,如何供蓝图节点调用

配置 python 代码的路径,使 UE5 启动时,加载代码文件。重启之后,在蓝图中右键,就能搜索到你定义的方法了。参数为 str 字符串类型,返回值为 向量数组。注意:一定要 重启 UE5。

topcss的专栏 3996

第一篇!记录一下自己做的基于Python图形界面的网络聊天室

第一篇!记录一下自己做的基于Python图形界面的网络聊天室这是我的第一个篇博客!**2. 说一下要写的代码****3. 功能介绍:**4.具体功能实现 这是我的第一个篇博客! 自学了3个多月python,之前学习了socket,会写简单的在终端运行的聊天室,这段时间学习了tkinter,毕业设计准备做一个图形界面的网络聊天室。查阅了相关资料,然后自己花了大概2天写了一个基于python+tkin...

tretrehyyy的博客 6529

1553B通信项目开发笔记(一)协议概述

最近接了个项目,需要用1553B协议通信,仅作为RT端口进行通信,控制器采用ARM 使用芯片为国产的BU61580芯片,功能和引脚和DDC的61580完全一致。

u010396127的博客 2万+

文件的读写基本操作

一、文件是计算机中数据持久化存储的表现形式 读写文件标准操作格式1: 1、打开文件:file1 = open('文件名','读写模式') 2、操作文件 3、关闭文件:file1.close() 文件操作完毕后必须关闭,否则长期保持对文件的连接状态,造成内存溢出的现象发生 读写文件操作格式2: # 1、打开文件 file1 = open('demo.txt','w') # 2、操作文件 file1.write('hello world') # 3、关闭文件 file1.close() 1、打开文件:wi

范高伦的博客 1万+

android studio 2022打开了v1 签名但是生成的apk没有v1签名问题

我使用了Android Studio Flamingo | 2022.2.1 Patch 2版本的IDE编译了一个apk,但是apksigner查看apk的签名信息时,发现只有v2签名,没有v1签名。试着改小一下minSdkVersion 为23重新编译apk,再检测一下签名版本v1居然打开了!参考网上搜索到的方法,手动在build.gradle里面添加。但是编译出来的apk还是只有v2的签名。里面提到了v1签名还和。

hedalei的博客 466

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python 使用tkinter实现聊天窗口界面及简单的消息发送

本文仅在于实现界面,不讨论各种消息协议,具体消息协议后期有空再行更新,谢谢。 “”“ # 名 称:聊天界面 # 环 境:python 3.8.5(其他版本没测试,请自行测试) # 模 块:tkinter/tkinter.messagebox/pickle/json # 制 作:Q343340657(WX同号) ”“” 登录界面,效果如下: 代码如下: “”“ # 名 称:聊天登录界面 # 环 境:python 3.8.5(其他版本没测试,请自行测试) # 模 块:tkinter/tkinte

爱折腾的博客 6304

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

使用Python的tkinter库实现简单的聊天室

前言 以下代码可以实现一个简易的python聊天室功能,在图形界面中我们输入消息,点击发送可以在服务器端与客户端显示 服务器端代码 import tkinter import tkinter.font as tkFont import socket import threading import time import sys class ServerUI(): local="127.0...

STARSG0d的博客 4600

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 411
上一篇: 5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了...
下一篇: 快检查一下你的sudo:无需密码就能获取root权限,还是个10年老bug
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值