Python: SocketServer 没有套接字

Python: SocketServer has no socket

我想使用 Python 套接字服务器来等待消息,但要定期超时并进行一些其他处理。据我所知,下面的代码应该可以工作,但是对 handle_request() 的调用抛出一个 AttributeError 异常,抱怨 MyTCPServer 对象没有属性 'socket'。我做错了什么?

import socketserver

class SingleTCPHandler(socketserver.BaseRequestHandler):
    # One instance per connection.  Override handle(self) to customize action.
    def handle(self):
        # self.request is the client connection
        data = self.request.recv(1024)  # clip input at 1Kb
        print ("Received data: " + data.decode())
        self.request.close()

class MyTCPServer(socketserver.BaseServer):

    def __init__(self, serverAddress, handler):
        super().__init__(serverAddress, handler)

    def handle_timeout(self):
        print ("No message received in {0} seconds".format(self.timeout))

if __name__ == "__main__":
    print ("SocketServerWithTimeout.py")
    tcpServer = MyTCPServer(("127.0.0.1", 5006), SingleTCPHandler)
    tcpServer.timeout = 5

    loopCount = 0
    while loopCount < 5:
        tcpServer.handle_request()
        print ("Back from handle_request")
        loopCount = loopCount + 1

socketserver.BaseServer 是 UDP 和 TCP 服务器的通用基础 class。

如果您的服务器继承自 socketserver.TCPServer,您的代码将有效。