你能用python写一个包含客户端和服务器的基于tcp协议的简易聊天机械人代码吗?且能同时连接多个客户端的
时间: 2024-03-16 20:43:32 浏览: 60
当然可以。以下是一个简单的基于TCP协议的聊天机器人的Python代码,它包含了一个服务器和多个客户端,可以同时连接多个客户端。
服务器端代码:
```python
import socket
import threading
# 定义服务器地址和端口号
SERVER_ADDRESS = ('127.0.0.1', 8000)
# 定义一个列表,用于保存所有连接到服务器的客户端
clients = []
# 定义一个函数,用于向所有客户端广播消息
def broadcast(message, sender):
for client in clients:
if client != sender:
client.send(message)
# 定义一个函数,用于处理客户端的连接
def handle_client(client_socket):
# 将连接到服务器的客户端添加到列表中
clients.append(client_socket)
while True:
try:
# 接收客户端发送的消息
message = client_socket.recv(1024)
if message:
# 将接收到的消息广播给所有客户端
broadcast(message, client_socket)
else:
# 如果客户端断开连接,将其从列表中移除
clients.remove(client_socket)
client_socket.close()
break
except:
# 如果出现异常,将客户端从列表中移除
clients.remove(client_socket)
client_socket.close()
break
# 创建一个 TCP 服务器,并监听指定地址和端口号的连接请求
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(SERVER_ADDRESS)
server_socket.listen(5)
while True:
# 等待客户端的连接请求
client_socket, client_address = server_socket.accept()
# 创建一个线程,用于处理客户端的连接
client_thread = threading.Thread(target=handle_client, args=(client_socket,))
client_thread.start()
```
客户端代码:
```python
import socket
import threading
# 定义服务器地址和端口号
SERVER_ADDRESS = ('127.0.0.1', 8000)
# 定义一个函数,用于接收服务器发送的消息
def receive_message(client_socket):
while True:
try:
# 接收服务器发送的消息
message = client_socket.recv(1024)
if message:
# 打印接收到的消息
print(message.decode('utf-8'))
except:
# 如果出现异常,关闭客户端连接
client_socket.close()
break
# 创建一个 TCP 客户端,并连接到指定地址和端口号的服务器
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(SERVER_ADDRESS)
# 创建一个线程,用于接收服务器发送的消息
receive_thread = threading.Thread(target=receive_message, args=(client_socket,))
receive_thread.start()
# 循环读取用户输入的消息,并发送给服务器
while True:
message = input()
if message:
# 发送消息给服务器
client_socket.send(message.encode('utf-8'))
```
使用方法:
1. 运行服务器端代码。
2. 运行多个客户端代码,连接到服务器。
3. 在任意一个客户端输入消息,其他客户端都会收到该消息。
注意:在运行客户端代码时,需要将`SERVER_ADDRESS`变量的值修改为服务器的地址和端口号。
阅读全文