1. 项目概述
本项目将构建一个多人聊天室,允许多个用户同时在线聊天。聊天室的功能包括:
- 用户可以登录聊天室。
- 用户可以发送和接收消息。
- 用户可以查看在线用户列表。
- 用户可以退出聊天室。
2. 技术栈
本项目将使用以下技术栈:
- Python 3.8
- Socket 编程
- 多线程处理
- SQLite3 数据库
3. 项目结构
项目结构如下:
chatroom/
|- server.py
|- client.py
|- database.py
|- utils.py
server.py
:聊天室服务器端程序。client.py
:聊天室客户端程序。database.py
:数据库操作类。utils.py
:工具函数。
4. 实现细节
4.1 服务器端
服务器端程序 server.py
负责创建聊天室服务器,并处理客户端的连接请求和消息收发。服务器端程序代码如下:
import socket
import threading
import database
# 创建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
server_socket.bind(("localhost", 9999))
# 监听端口
server_socket.listen()
# 创建在线用户列表
online_users = {}
# 创建数据库对象
db = database.Database()
# 循环接收客户端连接请求
while True:
# 接收客户端连接请求
client_socket, client_addr = server_socket.accept()
# 创建新的线程处理客户端连接
thread = threading.Thread(target=handle_client, args=(client_socket, client_addr))
# 启动线程
thread.start()
# 处理客户端连接
def handle_client(client_socket, client_addr):
# 获取客户端用户名
username = client_socket.recv(1024).decode()
# 将客户端加入在线用户列表
online_users[client_socket] = username
# 将客户端信息写入数据库
db.insert_user(username, client_addr[0])
# 循环接收客户端消息
while True:
# 接收客户端消息
message = client_socket.recv(1024).decode()
# 如果客户端消息为空,则关闭连接
if not message:
break
# 将消息发送给其他在线用户
for socket, username in online_users.items():
if socket != client_socket:
socket.send(f"{username}: {message}".encode())
# 将客户端从在线用户列表中移除
del online_users[client_socket]
# 将客户端信息从数据库中删除
db.delete_user(username)
# 关闭客户端连接
client_socket.close()
4.2 客户端
客户端程序 client.py
负责连接到聊天室服务器,并发送和接收消息。客户端程序代码如下:
import socket
import threading
# 创建套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
client_socket.connect(("localhost", 9999))
# 获取用户名
username = input("Enter your username: ")
# 将用户名发送给服务器
client_socket.send(username.encode())
# 循环接收服务器消息
while True:
# 接收服务器消息
message = client_socket.recv(1024).decode()
# 如果服务器消息为空,则关闭连接
if not message:
break
# 打印服务器消息
print(message)
# 关闭连接
client_socket.close()
5. 运行项目
5.1 运行服务器
python server.py
5.2 运行客户端
python client.py
6. 测试项目
在不同的终端窗口中运行多个客户端程序,可以测试聊天室的功能。
7. 总结
本项目演示了如何使用 Python 语言构建一个多人聊天室项目。读者可以根据本项目进行扩展,实现更加复杂的功能。