Python简易聊天室实现:原理与代码解析

阿麦
阿麦
发布时间:2026-10-14| 5人浏览过
原创

本文介绍如何使用Python构建一个简易聊天室。通过解析服务端转发消息的原理,结合Socket网络编程与多线程技术,分别实现服务端监听与客户端GUI界面。文章提供完整代码示例及百度网盘下载链接,帮助开发者快速理解即时通讯软件的基本架构。

Python简易聊天室实现

许多用户认为现有的即时通讯工具如微信、QQ或ICQ等功能过于臃肿,因此希望自主开发一款轻量级的聊天软件。本文将指导读者如何从零开始构建这样一个聊天系统。

要开发聊天室或聊天软件,首先必须理解其核心工作原理。以下图片展示了基本的通信架构:

(此处展示通信原理图)

从图中可以看出,服务端的核心功能仅是负责消息的转发。明确这一原理后,即可开始具体的编码工作。

服务端代码实现


import socket,threading #导入文件
def shou(new_s,socket_list):#创建一个收的函数
    try:
        nikename = new_s.recv(1024).decode('utf-8').strip()#为当前客户端执行一次‘收'来获取
    except:
        new_s.close()#关闭当前客户端的套接字
        socket_list.remove(new_s)#去除套接字列表里的nes_s
        for i in socket_list:
            i.send('\n公告:一个未知的人离开了聊天室......'.encode('utf-8'))#广播
        return None
    for i in socket_list:
        i.send(f'\n公告:欢迎{nikename}进入了聊天室........\n'.encode('utf-8'))#广播
    while 1:
        try:
            recv_data = new_s.recv(1024).decode('utf-8')#如果接受到了客户端发来的信息
            print(recv_data)#仅作提醒用
            for i in socket_list:
                i.send(f'{nikename}:{recv_data}'.encode('utf-8'))#广播
        except:
            new_s.close()#关闭当前客户端的套接字
            socket_list.remove(new_s)#去除套接字列表里的nes_s
            for i in socket_list:
                i.send(f'公告:{nikename}离开了聊天室......'.encode('utf-8'))#广播
            break#跳出循环
def fa(new_s):
    while 1:
        msg = input('')#发出
        new_s.send(msg.encode('utf-8'))
#创建套接字
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定
s.bind(("",5678))#端口
#监听
s.listen(5)
print('服务端处于监听状态,等待客户端接入..........')
socket_list = []
while 1:
    #接入
    new_s,addr = s.accept()
    print('客户端已接入')
    socket_list.append(new_s)
    new_s.send('请输入昵称:'.encode('utf-8'))
    t1 = threading.Thread(target=shou,args=(new_s,socket_list))
    t2 = threading.Thread(target=fa,args=(new_s,))
    t1.start()
    t2.start()
# new_s.close()
# s.close()

客户端代码实现

服务端的逻辑相对简单,接下来我们查看客户端的实现部分。


import socket,threading
import tkinter as tk
#创建套接字
a = 1
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("127.0.0.1",5678))#此处端口看服务端的端口,127.0.0.1要改成服务端主机的ipv4地址
print('已链接服务端,通讯加密中')
def shou(s,msg_texe):
    recv_data = s.recv(1024).decode('utf-8')
    msg_text.insert(tk.END, recv_data)
    while 1:
        recv_data = s.recv(1024).decode('utf-8')
        msg_text.insert(tk.END,recv_data)
def fa():
    global a
    if a == 0:
        msg = input_text.get('0.0',tk.END)
        s.send(msg.encode('utf-8'))
        input_text.delete('0.0',tk.END)
    else:
        msg = input_text.get('0.0', tk.END)
        s.send(msg.encode('utf-8'))
        input_text.delete('0.0', tk.END)
        msg_text.delete('0.0', tk.END)
        a = 0

app = tk.Tk()
app.title('聊天室')
#显示消息框
msg_frame = tk.Frame(app,width=480,height=300)
msg_frame.grid(row=0,column=0,padx=6,pady=6)
msg_frame.grid_propagate(0)#固定Frame的大小
msg_text = tk.Text(msg_frame,bg='white')
msg_text.grid()
# msg_text.insert('0.0','hhh')
#输入
input_frame = tk.Frame(app,width=480,height=100)
input_frame.grid(row=1,column=0)
input_frame.grid_propagate(0)
input_text = tk.Text(input_frame,bg='white')
input_text.grid()
#发送按钮
btn_frame = tk.Frame(app,width=480,height=20)
btn_frame.grid(row=2,column=0,sticky='E')
button = tk.Button(btn_frame,text='发送',command=fa)
button.grid()
#线程
t1 = threading.Thread(target=shou,args=(s,msg_text))
t1.daemon = True
t1.start()
app.mainloop()
#s.close()

如需直接获取完整代码,可访问以下链接下载:https://pan.baidu.com/s/1KD6p_a2KgFxbOVN5yftQRw

提取码:2iwk

总结

本文到此结束,希望能为您的开发工作提供有益参考。欢迎持续关注本站以获取更多技术内容。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。