python 实现socket 多线程多客户端代码
时间: 2023-08-12 12:28:43 浏览: 157
以下是一个简单的 Python socket 多线程多客户端代码示例:
```python
import socket
import threading
# 服务器 IP 和端口
SERVER_HOST = '0.0.0.0'
SERVER_PORT = 8000
# 最大客户端连接数
MAX_CLIENTS = 5
# 定义线程锁
lock = threading.Lock()
# 处理客户端请求的函数
def handle_client(client_socket, client_address):
print(f"[NEW CONNECTION] {client_address} connected.")
while True:
# 接收客户端数据
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
# 处理客户端请求
response = f"Received message: {data}"
# 发送响应给客户端
client_socket.send(response.encode('utf-8'))
# 关闭客户端连接
client_socket.close()
print(f"[CLOSED CONNECTION] {client_address} disconnected.")
# 创建服务器 socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器 IP 和端口
server_socket.bind((SERVER_HOST, SERVER_PORT))
# 监听客户端连接
server_socket.listen(MAX_CLIENTS)
print(f"[LISTENING] Server is listening on {SERVER_HOST}:{SERVER_PORT}.")
# 循环接收客户端连接
while True:
# 接收客户端连接
client_socket, client_address = server_socket.accept()
# 创建线程处理客户端请求
with lock:
thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
thread.start()
```
在上面的代码中,我们首先定义了服务器的 IP 和端口,以及最大客户端连接数。接着,我们定义了一个处理客户端请求的函数 `handle_client`,该函数接收客户端 socket 和地址作为参数。在函数内部,我们通过循环接收客户端发送的数据,处理请求,并发送响应给客户端。最后,我们关闭客户端连接并输出相应的日志信息。
在主程序中,我们首先创建服务器 socket,并绑定服务器 IP 和端口。接着,我们循环接收客户端连接,并创建线程处理客户端请求。注意,我们使用了线程锁来保证多个线程之间的数据同步。
阅读全文