Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> Kết Nối Mạng

Khắc phục lỗi Python Socket Error 48

Socket Error 48 là lỗi Python xảy ra khi tiến trình cố gắng gắn (bind) vào cổng (port) đã được sử dụng.

Khắc phục lỗi Python Socket Error 48

Nguyên nhân lỗi "socket.error: [Errno 48] Address already in use"

Sau nghiên cứu ngắn, nguyên nhân:

  • Tiến trình đã gắn cổng (Process Bound to Port): Khi tạo tiến trình trên server, nó dùng một cổng để giao tiếp internet. Cổng giống như chủ nhà chỉ phục vụ một khách tại một thời điểm. Nếu không chỉ định cổng, server tạo trên cổng mặc định. Lần sau tạo tiến trình khác, phải chỉ định cổng vì cổng mặc định đã bị chiếm.

Giải pháp 1: Chỉ định số cổng (Specifying Port Number)

Lỗi thường xảy ra khi gắn tiến trình vào cổng mặc định đã bị tiến trình khác chiếm. Chỉ định cổng cho tiến trình mới:

  1. Có thể bạn đang dùng lệnh:
     $ python -m SimpleHTTPServer
  2. Thay bằng lệnh này:
     $ python -m SimpleHTTPServer (Port Number)
  3. Đợi tiến trình tạo và kiểm tra xem lỗi còn không.

Giải pháp 2: Giải phóng cổng (Freeing up the Port)

Nếu cổng đã bị tiến trình khác dùng, tiến trình mới không chạy được trên cổng đó. Giải phóng cổng bằng cách kết thúc tiến trình cũ rồi chạy tiến trình mới:

  1. Dùng lệnh sau liệt kê tiến trình dùng cổng cụ thể:
    $ ps -fA | grep python
  2. Kết quả sẽ giống dạng:
     601 88234 12788 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
  3. Mã tiến trình (PID) để kill là "88234".
  4. Dùng lệnh kill tiến trình:
    kill 88234

    Hoặc dùng lệnh:

    sudo kill -9 PID
  5. Giờ có thể gắn tiến trình vào cổng này:
     $ python -m SimpleHTTPServer (Port Number)
  6. Tiến trình sẽ được tạo.

Giải pháp 3: Khởi động lại Raspberry Chỉ (Only For Raspberry Pi)

Trên Raspberry Pi có thể khắc phục bằng cách restart Pi hoặc kill terminal shell. Pi đôi khi không tự kill tiến trình cũ, gây lỗi do tiến trình trước vẫn chạy trên cổng.