Ho esaminato la documentazione per SocketServer
. Ho copiato il codice del server TCP dalla documentazione e funziona correttamente. Tuttavia, ho notato che ogni volta che CTRL-c'ed fuori dal programma nel mio terminale, e poi provato a farlo funzionare di nuovo, vorrei avere il seguente errore:SocketServer: eliminazione di "[Errno 98] Indirizzo già in uso"
socket.error: [Errno 98] Address already in use
ho guardato in su come risolvere il problema leggendo this e this. Ho aggiunto la seguente riga al mio codice per cercare di consentire il riutilizzo di indirizzo:
server.allow_reuse_address = True
Sono ancora lo stesso problema anche con la linea di cui sopra ha aggiunto. Ho anche aggiunto uno try
e except
alla mia funzione server.serve_forever()
, rilevando l'eccezione KeyboardInterrupt e chiamando server.shutdown()
e server.socket.close()
nella speranza che l'indirizzo venga liberato.
Ecco tutta la misura del mio codice server TCP (Nota: ho escluso la classe 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()
ancora sto ottenendo l'errore che esegue il codice di cui sopra e aspettare vicino ad un minuto fino a quando l'indirizzo è finalmente liberato. Questo è frustrante quando eseguo il debug e cambio continuamente il mio codice.
Sto eseguendo questo codice utilizzando Python 2.7.3 su un RaspberryPi con Raspbian "Wheezy" 7.0.
Ha funzionato. Grazie! –