我一直在查看SocketServer
. 我从文档中复制了 TCP 服务器代码,它运行良好。但是,我注意到每当我在终端中按 ctrl-c 退出程序,然后尝试再次运行它时,我都会收到以下错误:
socket.error: [Errno 98] Address already in use
我通过阅读这个和这个来研究如何解决这个问题。我在我的代码中添加了以下行以尝试允许重用地址:
server.allow_reuse_address = True
即使添加了上述行,我仍然遇到同样的问题。我还在我的函数周围添加了一个try
and ,捕获 KeyboardInterrupt 异常并调用并希望该地址将被释放。except
server.serve_forever()
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()
我仍然在运行上面的代码时遇到错误,并且必须等待近一分钟才能最终释放地址。当我不断调试和更改代码时,这令人沮丧。
我在运行 Raspbian "Wheezy" 7.0 的 RaspberryPi 上使用 Python 2.7.3 运行此代码。