2013-05-08 63 views
12

我一直在尋找SocketServer的文檔。我從文檔中複製了TCP服務器代碼,並且運行良好。然而,我注意到,在我的終端每當我CTRL-c'ed出來的方案,然後嘗試再次運行它,我會得到以下錯誤:SocketServer:擺脫'[Errno 98]地址已在使用'

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

我看着如何解決這個問題通過閱讀thisthis。添加以下行到我的代碼,試圖讓地址的重用:

server.allow_reuse_address = True 

我仍然遇到即使添加上述行同樣的問題。我還在我的server.serve_forever()函數週圍添加了一個tryexcept,捕獲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() 

我仍然得到錯誤運行上面的代碼,並有接近等待一分鐘,直到地址終於被釋放了。這是令人沮喪的時候,我正在調試和不斷改變我的代碼。

我在運行Raspbian「Wheezy」7.0的RaspberryPi上使用Python 2.7.3運行此代碼。

回答

18
... 
SocketServer.TCPServer.allow_reuse_address = True 
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
... 

allow_reuse_address應該在類上,而不是在實例上。

+0

工作。謝謝! – 2013-10-21 21:54:03

相關問題