0
我正在一个非常简单的服务器上工作。该服务器应该能够执行clients
所要求的一些预定义的命令。SocketServer - 如何识别客户端
我想单独存储关于连接客户端的信息。例如,我想要服务器添加一些特定的请求。
下面是一个例子:
SERVER
CLIENT1
CLIENT2
CLIENT1> print 'stuff'
SERVER>> REQUESTS: 1 OUTPUT: stuff
CLIENT2> print 'simple sentence'
SERVER>> REQUESTS: 1 OUTPUT: simple sentence
CLIENT> print 'hilarious'
SERVER>> REQUESTS: 2 OUTPUT: hilarious
我的代码很简单:
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
daemon_threads = True
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024)
command = data.split(' ')[0]
arguments = data.split(' ')[1:]
cur_thread = threading.current_thread()
output = do_command(command,arguments)
response = "{}: {}".format(cur_thread.name, output)
self.request.sendall(response)
if __name__ == "__main__":
commands.register_commands()
HOST, PORT = _host, int(_port)
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
# start server
print "Running on: %s:%s" % (HOST, PORT)
server.serve_forever()
所以我想知道的是我怎么能存储每个客户的信息。我正在考虑创建一个类Client
并在每次连接后创建一个object
,但我不知道应在哪里创建此对象。
谢谢你,self.client_address正是我所期待的。我在本地计算机上测试它,所以client_address [0]对于所有客户端都是localhost,但client_address应该是唯一的。 –
@Milano是的,只要客户端在请求之间保持连接,您就可以使用它。如果他们重新连接,他们可能会得到一个不同的端口。 – glibdud