应用TCP和多线程写出响应客户端请求的聊天程序服务器端(服务器ip:192.168.1.1,服务器端口:8888
时间: 2024-03-26 22:40:00 浏览: 14
好的,我可以为您提供一个简单的TCP多线程聊天程序服务器端的示例代码,可以响应客户端请求。以下是代码:
```python
import socket
import threading
# 服务器IP和端口
SERVER_HOST = '192.168.1.1'
SERVER_PORT = 8888
# 最大客户端连接数
MAX_CLIENTS = 10
# 存储所有客户端的连接对象
clients = []
# 创建TCP服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定服务器IP和端口
server_socket.bind((SERVER_HOST, SERVER_PORT))
# 设置服务器监听
server_socket.listen(MAX_CLIENTS)
print(f'Server started on {SERVER_HOST}:{SERVER_PORT}')
def handle_client(client_socket, client_address):
"""
处理客户端请求的函数
"""
while True:
try:
# 接收客户端消息
message = client_socket.recv(1024).decode()
if not message:
# 客户端断开连接
print(f'{client_address} disconnected')
clients.remove(client_socket)
client_socket.close()
break
else:
# 向所有客户端广播消息
for c in clients:
if c != client_socket:
c.sendall(message.encode())
except:
# 发生异常,客户端断开连接
print(f'{client_address} disconnected')
clients.remove(client_socket)
client_socket.close()
break
while True:
try:
# 等待客户端连接请求
client_socket, client_address = server_socket.accept()
print(f'{client_address} connected')
# 将客户端连接对象存储到列表中
clients.append(client_socket)
# 启动新的线程处理客户端请求
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
except:
# 服务器发生异常
print('Server error')
break
# 关闭服务器套接字
server_socket.close()
```
在上述代码中,我们使用了 `socket` 模块创建了一个 TCP 服务器套接字,并将其绑定到指定的 IP 地址和端口上。然后,我们使用 `listen` 方法开始监听客户端连接请求,同时创建一个空列表来存储所有客户端连接对象。
在 `handle_client` 函数中,我们使用一个死循环来不断接收客户端发送的消息,并将其广播给所有其他客户端。如果客户端断开连接,我们将其连接对象从列表中删除,并关闭连接对象。
最后,在主循环中,我们使用 `accept` 方法等待客户端连接请求,并为每个新连接启动一个新的线程来处理客户端请求。如果服务器发生异常,我们将退出主循环,并关闭服务器套接字。
希望这个简单的示例程序能帮助到您。