我一直在查看SocketServer
的文档。我从文档中复制了TCP服务器代码并成功运行。然而,我发现每当我在终端中按下ctrl-c退出程序后,再试图运行它时,就会出现以下错误:
socket.error: [Errno 98] Address already in use
我通过阅读这个和这个来了解如何解决问题。我在我的代码中添加了以下行以尝试允许地址的重复使用:
server.allow_reuse_address = True
即使我添加了上面的代码行,我仍然遇到相同的问题。我还在我的server.serve_forever()
函数周围添加了try
和except
,捕获了KeyboardInterrupt异常并调用server.shutdown()
和server.socket.close()
,希望地址会被释放。
这是我的TCP服务器代码的全部内容(注意:我排除了MyTCPHandler类):
if __name__ == "__main__":
HOST, PORT = '', 9999
# Create the server, binding to localhost on port 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.allow_reuse_address = True
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
try:
server.serve_forever()
except KeyboardInterrupt:
server.shutdown()
server.socket.close()
我仍然在运行上面的代码时遇到错误,并且必须等待近一分钟才能最终释放地址。当我不断地进行调试和更改我的代码时,这很令人沮丧。
我正在使用Python 2.7.3在RaspberryPi上运行Raspbian“Wheezy”7.0。