分享

Python 如何实现最简单的多人聊天室

 Python集中营 2022-10-10 发布于甘肃
1,设计思路
  • 服务端:通过创建一个通信的服务端一直处于监听状态,并且开启多线程的方式使每个客户端被监听到以后开启一个独立的线程进行通信处理。

  • 客户端:创建新的客户端连接,在与服务端完成连接以后并一直保持通信状态。

  • 通信方式:socket 套接字通信。

2,项目介绍
  • 项目使用编程语言版本:Python3 语言。

  • Python 依赖库:time、socket、threading、sys 四个依赖库。

  • 项目包括两个模块:server.py、client.py,server.py 实现服务端的程序执行逻辑,client.py 实现客户端的程序执行逻辑。

3,实例叙述
  • 服务端:server.py 完整示例

# -*- coding:utf-8 -*-
# 导入 socket 通讯模块import socket# 导入时间管理模块import time# 导入多线程模块import threading
# 设置服务地址、端口address = ("localhost", 4444)

def run(): # 创建服务端 socket socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定服务地址、端口 socket_server.bind(address) # 设置监听最大等待数为 5 个 socket_server.listen(5) print("服务已经启动,正在等待客户端连接......") while True: # 设置睡眠时间 time.sleep(0.1) # 允许客户端连接 client, info = socket_server.accept() # 启用新线程调用消息处理 thread = threading.Thread(target=catch_message,args=(client,info)) # 设置为守护线程 thread.setDaemon(True) # 开启线程执行 thread.start()

def catch_message(client, info): client.send("欢迎来到 Python 聊天室".encode('utf-8')) print("客户端信息:" + str(info)) while True: try: # 接收客户端消息、接收最大长度为 1024,并进行 utf-8 解码 message = client.recv(1024).decode('utf-8') # 校验是否关闭客户端 if not message or 'Q' == message: print("关闭客户端") break print("接收消息:" + message) # 将消息进行 utf-8 编码后发给客户端 client.send(message.encode('utf-8')) except Exception as e: # 异常处理 print(e) break

if __name__ == '__main__': # main 入口函数执行 run()
  • 客户端:client.py 完整示例

# -*- coding:utf-8 -*-
# 导入socket 通信模块import socket# 导入系统 sys 模块import sys
# 设置客户端请求连接地址、端口address = ("localhost", 4444)

def run(): try: # 创建客户端 socket socket_client = socket.socket() # 连接服务端 socket_client.connect(address) # 接收服务端消息并进行 utf-8 解码 print(socket_client.recv(1024).decode()) while True: # 允许控制台输入 message = input("请输入 >>") if len(message) == 0: continue else: # 将控制台输入消息进行 utf-8 编码后发送 socket_client.send(message.encode('utf-8')) # 接收服务端消息并进行 utf-8 解码 print(socket_client.recv(1024).decode('utf-8')) # 客户端关闭 socket_client.close() except Exception as e: # 异常 处理 print(e) sys.exit(0)

if __name__ == '__main__': # 主函数入口 run()
  • 程序执行步骤

    (1)第一步,启动服务端 python server.py

    (2)第二步,启动客户端 python client.py

    (3)第三步,多个客户端继续启动 python client.py

4,效果展示

5,展望

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约