如何停止 TCPServer
Posted
技术标签:
【中文标题】如何停止 TCPServer【英文标题】:How to stop TCPServer 【发布时间】:2018-07-05 03:01:18 【问题描述】:在每三个迭代中,TCPServer 都需要启动,然后立即停止。全部 3 次都需要在 8000 端口上启动。
正如它在下面的代码中定义的那样,TCPServer 启动。但它仅在第一次迭代期间开始。其他两次迭代未能启动 TCPServer,因为端口 8000 已被上一次(第一次)迭代中启动的 TCPServer 使用。 为确保 8000 端口可用,需要关闭之前启动的 TCP 服务器。
如何终止(停止)已经在运行的 TCPServer?
import SimpleHTTPServer
import SocketServer
def startServer():
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
Handler.extensions_map.update('.webapp': 'application/x-web-app-manifest+json', )
try:
httpd = SocketServer.TCPServer(("", 8000), Handler)
httpd.serve_forever()
print('httpd server has been successfully started ')
except Exception, e:
print(e)
for i in range(3):
startServer()
【问题讨论】:
为了清楚起见,Python 的版本?SocketServer
在 3.0 中重命名为 socketserver
。
你在使用 macOS 吗?
shutdown()
告诉serve_forever()
循环停止并等待它停止。 2.6 版中的新功能。 docs.python.org/2/library/socketserver.html
@Mark:运行 Python 2.7。请张贴作为答案,以便我们投票!
【参考方案1】:
使用shutdown()
告诉serve_forever()
循环停止并等待它停止。 2.6 版中的新功能。 docs.python.org/2/library/socketserver.html
对于您的代码,它应该很简单
httpd.serve_forever()
print('httpd server has been successfully started ')
httpd.shutdown()
httpd.server_close()
print('httpd server has been successfully stopped')
我将把它留给 OP,以便更好地使用这个和链接页面底部的示例来满足所需的要求。
【讨论】:
以上是关于如何停止 TCPServer的主要内容,如果未能解决你的问题,请参考以下文章
POCO库中文编程参考指南(10)如何使用TCPServer框架?