编写一cs架构关于简单的多人聊天室的服务器端和客户端的实现包含1用户可以查看收到的信息。2用户可以群发信息和私发信息。3服务器端可以显示登入的用户
以下是一个简单的C/S架构的多人聊天室的服务器端和客户端的实现示例:
服务器端:
import socket
import threading
# 用于存储连接到服务器的客户端
clients = []
def handle_client(client):
while True:
try:
# 接收客户端发送的消息
message = client.recv(1024).decode('utf-8')
if message:
# 广播消息给所有客户端
broadcast(message)
else:
# 如果接收到空消息,表示客户端断开连接
remove(client)
except:
# 发生异常时,表示客户端断开连接
remove(client)
break
def broadcast(message):
# 将消息广播给所有客户端
for client in clients:
client.send(message.encode('utf-8'))
def remove(client):
# 移除断开连接的客户端
if client in clients:
clients.remove(client)
def start_server():
# 创建服务器Socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 8888))
server.listen(5)
print('服务器已启动,等待客户端连接...')
while True:
# 接受客户端连接
client, addr = server.accept()
clients.append(client)
print('客户端已连接:', addr)
# 创建线程处理客户端消息
threading.Thread(target=handle_client, args=(client,)).start()
start_server()
客户端:
import socket
import threading
def receive_messages(sock):
while True:
try:
# 接收服务器发送的消息
message = sock.recv(1024).decode('utf-8')
print(message)
except:
# 发生异常时,表示服务器断开连接
print('与服务器断开连接')
sock.close()
break
def start_client():
# 创建客户端Socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 8888))
print('已连接到服务器')
# 创建线程接收服务器消息
threading.Thread(target=receive_messages, args=(client,)).start()
while True:
# 发送消息给服务器
message = input()
client.send(message.encode('utf-8'))
start_client()
运行以上代码,可以启动一个多人聊天室。客户端可以通过输入消息发送给服务器,并接收服务器广播的消息。服务器端可以显示连接到服务器的用户。客户端可以通过输入消息发送给服务器,并接收服务器广播的消息
原文地址: https://www.cveoy.top/t/topic/hyqZ 著作权归作者所有。请勿转载和采集!