Я смотрел документацию для SocketServer
. Я скопировал код сервера TCP из документации, и он работает нормально. Тем не менее, я заметил, что всякий раз, когда я закрывал программу в своем терминале, а затем пытался запустить ее снова, я получил бы следующую ошибку:
socket.error: [Errno 98] Address already in use
Я рассмотрел, как устранить проблему, прочитав этот и этот. Я добавил следующую строку в свой код, чтобы попытаться разрешить повторное использование адреса:
server.allow_reuse_address = True
Я все еще испытываю ту же проблему, даже с добавленной выше строкой. Я также добавил try
и except
вокруг моей функции server.serve_forever()
, перехватив исключение 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.