2017-11-04 7 views
-2

クライアントからのすべてのメッセージを自分の「TCPサーバー」のリストに格納します。Python TCPソケットサーバーはクライアントからのメッセージを格納します

サーバーが最初のメッセージを受信すると、handle関数はメッセージをlistに追加します。

サーバーがクライアントから2番目のメッセージを受信すると、以前に追加されたメッセージのトレースはありません。

免責事項:なぜこれが起こっているのか分かります。私はすべてのメッセージをリストに保存する方法を理解できません。私はこれを実装するのにSocketServerを使いたいだけです。

+0

どうしてですか? –

+0

私はあなたのコードを実行し、 'echo -e abcd | nc localhost 9999'が複数回追加され、新しいメッセージが 'requests'に追加されます。 –

+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'] 
関連する問題