Tôi đã xem tài liệu cho SocketServer
. Tôi đã sao chép mã máy chủ TCP từ tài liệu và nó chạy tốt. Tuy nhiên, tôi nhận thấy rằng bất cứ khi nào tôi Ctrl-c'ed ra của chương trình trong thiết bị đầu cuối của tôi, và sau đó cố gắng chạy nó một lần nữa, tôi sẽ nhận được lỗi sau:SocketServer: loại bỏ '[Errno 98] Địa chỉ đã được sử dụng'
socket.error: [Errno 98] Address already in use
Tôi nhìn vào cách để khắc phục vấn đề bằng cách đọc this và this. Tôi đã thêm dòng sau vào mã của mình để cố gắng cho phép sử dụng lại địa chỉ:
server.allow_reuse_address = True
Tôi vẫn gặp sự cố tương tự ngay cả với dòng trên đã thêm. Tôi cũng đã thêm một số try
và except
xung quanh chức năng server.serve_forever()
của mình, bắt ngoại lệ KeyboardInterrupt và gọi server.shutdown()
và server.socket.close()
với hy vọng rằng địa chỉ đó sẽ được giải phóng.
Đây là mức độ đầy đủ của mã máy chủ TCP của tôi (Lưu ý: Tôi loại trừ lớp 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()
tôi vẫn nhận được lỗi chạy đoạn code trên và phải chờ gần một phút cho đến khi địa chỉ cuối cùng cũng được giải phóng. Điều này thật khó chịu khi tôi gỡ lỗi và thay đổi mã của mình liên tục.
Tôi đang chạy mã này bằng Python 2.7.3 trên RaspberryPi chạy Raspbian "Wheezy" 7.0.
Điều đó đã hiệu quả. Cảm ơn! –