保存套接字ID并将消息发送给正确的人是一个常见的问题,特别是在多个客户端同时连接到服务器的情况下。下面是一个解决方案的示例代码,使用Python的socket库和字典数据结构来实现:
import socket
# 创建一个字典,用于保存套接字ID和对应的客户端信息
client_sockets = {}
# 创建服务器套接字并绑定到指定端口
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8888))
server_socket.listen(5)
def handle_client(client_socket, client_address):
while True:
# 接收客户端发送的消息
data = client_socket.recv(1024)
if not data:
break
# 根据套接字ID查找客户端信息,并发送消息给正确的人
for socket_id, address in client_sockets.items():
if address != client_address:
socket = client_sockets[socket_id]
socket.send(data)
while True:
# 接收客户端连接
client_socket, client_address = server_socket.accept()
print('New client connected:', client_address)
# 生成唯一的套接字ID并将其与客户端信息保存到字典中
socket_id = str(client_address[1])
client_sockets[socket_id] = client_socket
# 创建一个新线程来处理客户端消息
threading.Thread(target=handle_client, args=(client_socket, client_address)).start()
上述代码的主要思路是:
client_sockets
用于保存套接字ID和对应的客户端信息。client_sockets
字典中。handle_client
函数中,通过接收到的消息,遍历client_sockets
字典,找到除了当前客户端外的其他客户端套接字,并将消息发送给它们。请注意,上述代码仅为示例,实际情况下可能需要添加更多的错误处理和安全性检查。