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
,您的代码将有效。
我想使用 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
,您的代码将有效。