Python TCP Socket服务器存储来自客户端的消息

时间:2017-11-04 05:30:04

标签: python sockets tcp socketserver tcpsocket

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

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()

当服务器收到第一条消息时,handle函数会将消息附加到列表中。

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

  

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

1 个答案:

答案 0 :(得分: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']