如何停止 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框架?

用Ruby(TCPServer)创建的简单服务器,如何从另一个IP访问?

ThreadingTCPServer 如何设置端口重用

导模型.TcpServer方案

Oracle 之 管理

Oracle 之 管理