2017-11-04 301 views
-2

我想将来自客户端的所有消息存储在我的'TCP服务器'列表中。Python TCP Socket服务器存储来自客户端的消息

import SocketServer 

class MainServerHandler(SocketServer.BaseRequestHandler): 
    requests = [] 

    def handle(self): 
      message = self.request.recv(4) 
      self.requests.append(message) 


HOST, PORT = "localhost", 9999 
server = SocketServer.TCPServer((HOST, PORT), MainServerHandler) 
server.serve_forever() 

当服务器收到第一条消息时,句柄函数将消息追加到列表中。

当服务器收到来自客户端的第二条消息时,没有跟踪先前附加的消息。

免责声明:我知道为什么会发生这种情况。我只是无法找出将所有消息存储在列表中的方法。我只想使用SocketServer来实现这一点。

+0

为什么会发生? – 2017-11-04 06:08:34

+0

我刚刚通过运行它来测试代码,然后执行'echo -e abcd | nc localhost 9999'多次,每个新消息被附加到'requests'。 – 2017-11-04 06:26:09

+0

您的代码正常工作,如下面的答案中所示。如果你有什么不工作,它是在你没有显示的代码中。制作[mcve]。 –

回答

0

请求处理程序获取对每个客户端连接一个新的实例,但你已经创建请求作为一个类变量,它的工作原理:

#!python2 
import SocketServer 

class MainServerHandler(SocketServer.BaseRequestHandler): 
    requests = [] 
    def handle(self): 
      message = self.request.recv(4) 
      self.requests.append(message) 
      print(self.requests) 

HOST, PORT = "", 9999 
server = SocketServer.TCPServer((HOST, PORT), MainServerHandler) 
server.serve_forever() 

客户端:从

import socket 

for i in range(3): 
    s = socket.socket() 
    s.connect(('localhost',9999)) 
    s.sendall(b'abc') 
    s.close() 

输出服务器:

[b'abc'] 
[b'abc', b'abc'] 
[b'abc', b'abc', b'abc'] 
相关问题