Python TCP Socket服务器存储来自客户端的消息
问题描述:
我想将来自客户端的所有消息存储在我的'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
来实现这一点。
答
请求处理程序获取对每个客户端连接一个新的实例,但你已经创建请求作为一个类变量,它的工作原理:
#!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']
为什么会发生? – 2017-11-04 06:08:34
我刚刚通过运行它来测试代码,然后执行'echo -e abcd | nc localhost 9999'多次,每个新消息被附加到'requests'。 – 2017-11-04 06:26:09
您的代码正常工作,如下面的答案中所示。如果你有什么不工作,它是在你没有显示的代码中。制作[mcve]。 –