我必须用Python中的serversocket模块提供的TCPServer创建一个多客户机聊天室。如何使this成为多客户机服务器并将消息发送给所有其他客户机?在
我已经尝试从示例中修改现有代码
…Python
import socket
import threading
import socketserver
clientList = []
class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
clientList.append(self.client_address)
print(clientList)
print("Client List Length : ",len(clientList))
while True:
data = str(self.request.recv(1024), 'ascii')
if(data.upper() == "EXIT"):
break
cur_thread = threading.current_thread()
response = bytes(data, 'utf_8')
#self.request.sendall(response)
for cl in range(1,len(clientList)):
print("sending to : ",clientList[cl])
self.request.sendto(response,clientList[cl])
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
def passtime():
pass
if __name__ == "__main__":
HOST, PORT = "localhost", 50007
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
# Start a thread with the server -- that thread will then start one
# more thread for each request
server_thread = threading.Thread(target=server.serve_forever)
# Exit the server thread when the main thread terminates
server_thread.daemon = True
server_thread.start()
while server_thread:
passtime()
print("Server loop running in thread:", server_thread.name)
。。。在
我有一个问题:
self.request.sendto(request,clientList[cl])
只将请求发送回发送客户端,而不是客户端列表中的目标客户端。在
编辑:我找到了一个解决方案,这里是:
^{pr2}$我使用来自here的inbox方法,并使用select.select
检查是否有要读取的输入。在
我找到了一个解决方案,这是:
我使用来自here的inbox方法,并使用
select.select
检查是否有要读取的输入。在相关问题 更多 >
编程相关推荐