用python写一个多人聊天室客户端和服务端的代码
时间: 2023-11-06 13:05:45 浏览: 41
以下是一个简单的多人聊天室客户端和服务端的Python代码:
服务端代码:
```python
import socket
import threading
# 用于存储所有客户端的连接
clients = []
# 服务端监听的IP地址和端口号
SERVER_IP = '127.0.0.1'
SERVER_PORT = 8000
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 将socket对象绑定到指定的IP地址和端口号上
server_socket.bind((SERVER_IP, SERVER_PORT))
# 设置socket对象为监听模式
server_socket.listen()
print(f'Server is running on {SERVER_IP}:{SERVER_PORT}')
# 用于处理客户端连接的函数
def handle_client(client_socket, client_address):
global clients
print(f'New client {client_address} is connected.')
# 将新连接的客户端加入到clients列表中
clients.append(client_socket)
while True:
try:
# 接收客户端的消息
message = client_socket.recv(1024).decode()
if message:
# 将消息广播给所有客户端
for c in clients:
if c != client_socket:
c.send(message.encode())
else:
# 如果客户端关闭了连接,则从clients列表中移除该客户端
clients.remove(client_socket)
client_socket.close()
print(f'Client {client_address} is disconnected.')
break
except:
# 如果发生异常,则从clients列表中移除该客户端
clients.remove(client_socket)
client_socket.close()
print(f'Client {client_address} is disconnected.')
break
while True:
# 等待新的客户端连接
client_socket, client_address = server_socket.accept()
# 创建一个新的线程处理客户端连接
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
```
客户端代码:
```python
import socket
import threading
# 客户端连接的IP地址和端口号
SERVER_IP = '127.0.0.1'
SERVER_PORT = 8000
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到指定的IP地址和端口号
client_socket.connect((SERVER_IP, SERVER_PORT))
# 用于接收服务端消息的函数
def receive_message():
while True:
try:
# 接收服务端的消息
message = client_socket.recv(1024).decode()
if message:
print(message)
else:
# 如果服务端关闭了连接,则退出循环
client_socket.close()
break
except:
# 如果发生异常,则退出循环
client_socket.close()
break
# 创建一个新的线程用于接收服务端的消息
receive_thread = threading.Thread(target=receive_message)
receive_thread.start()
while True:
# 获取用户输入的消息
message = input()
# 发送消息给服务端
client_socket.send(message.encode())
```