gpt4 book ai didi

python - 从 ThreadingTCPServer 正常关闭

转载 作者:可可西里 更新时间:2023-11-01 02:32:17 25 4
gpt4 key购买 nike

我基于示例 here 创建了一个运行 ThreadingTCPServer 的简单测试应用程序 (Python 2.6.1) .如果客户端发送命令“再见”,我想关闭服务器并干净地退出应用程序。退出部分工作正常,但当我尝试重新运行应用程序时,我得到:

socket.error: [Errno 48] Address already in use

我尝试了给出的解决方案 here用于设置套接字选项,但这似乎没有帮助。我尝试了多种关闭服务器的方法,但总是出现相同的错误。

知道我做错了什么吗?

import SocketServer
import socket
import sys
import threading
import time

class RequestHandler(SocketServer.BaseRequestHandler):

def setup(self):
print("Connection received from %s" % str(self.client_address))
self.request.send("Welcome!\n")

def handle(self):
while 1:
data = self.request.recv(1024)
if (data.strip() == 'bye'):
print("Leaving server.")
self.finish()
self.server.shutdown()
# None of these things seem to work either
#time.sleep(2)
#del self.server.socket
#self.server.socket.shutdown(socket.SHUT_WR)
#self.server.socket.close()
#self.server.server_close()
break


def finish(self):
self.request.send("Goodbye! Please come back soon.")

if __name__ == "__main__":
server = SocketServer.ThreadingTCPServer(("localhost", 9999), RequestHandler)
# This doesn't seem to help.
#server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
#server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.serve_forever()
print("Exiting program.")

最佳答案

如果您还没有找到答案,我相信这可能会有所帮助...

How to close a socket left open by a killed program?

但是,这与 Alex 提供的解决方案相同,所以也许这只是一个结束旧问题的机会。

关于python - 从 ThreadingTCPServer 正常关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3137640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com