我运行了一个python Socket服务器,还有套接字客户端。
现在,例如说有3个客户端连接到同一台服务器。请在下面找到服务器的代码。
#!/usr/bin/python # This is server.py file
import socket # Import socket module
import threading
serversocket = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 1234 # Reserve a port for your service.
serversocket.bind((host, port)) # Bind to the port
serversocket.listen(5)
print("Bound the port ",port,"on Machine : ",host,", and ready to accept connections.\n")
def clientThread(connection):
while True:
data=connection.recv(1024)
if not data:
break
connection.send("Thanks")
connection.close()
def sendMessage(connection, message):
connection.send(message)
while 1:
connection, address = serversocket.accept()
start_new_thread(clientthread, (connection,))
serversocket.close();
现在,我需要为特定客户端调用sendMessage,比如客户端A,B和C,请将它发送给B.在这种情况下,如何识别线程并调用该函数?
答案 0 :(得分:1)
您可以使用每个连接的队列和多个线程来解决此问题。
基本概要:
每个客户端连接产生两个线程 - 一个用于监视客户端输入,另一个用于监视队列。放在队列中的项目将被发送到客户端。每个客户端连接都有自己的输出队列。
您还需要一个全局字典来将客户端名称映射到其输出队列。
要向特定客户端发送消息,请找到客户端的输出队列并将消息添加到该客户端。
您还需要一种方法来关闭客户端的输出线程。一种常见的方法是在队列上使用 sentinel 值(如None
)来通知输出线程退出其处理循环。当客户端的输入线程检测到EOF时,它可以将sentinel值放在客户端的输出队列上,最终输出线程将自行关闭。