2017-11-04 169 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'] 
相關問題