Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> ระบบเครือข่าย

แก้ Python Socket Error 48 (Address already in use)

Socket Error 48 เป็น Python Error ที่เกิดเมื่อ Process พยายาม Bind ตัวเองกับ Port ที่ใช้งานอยู่แล้ว

แก้ Python Socket Error 48 (Address already in use)

สาเหตุของ "socket.error: [Errno 48] Address already in use" Error

หลังสืบสวนสั้นๆ เราพบสาเหตุดังนี้:

  • Process Bound to Port (Process ผูกกับ Port แล้ว): เมื่อ Process ถูกสร้างบน Server จะใช้ Port เพื่อสื่อสารกับอินเทอร์เน็ต Port เหมือน Host ที่รองรับแขกได้ทีละคน หากคุณไม่ระบุ Port Server จะสร้างบน Default Port ครั้งต่อไปที่สร้าง Process ต้องระบุ Port เพราะ Default Port ใช้งานอยู่แล้ว

Solution 1: ระบุ Port Number (Specifying Port Number)

Error เกิดส่วนใหญ่เมื่อพยายาม Bind Process กับ Default Port แต่ Default Port ผูกกับ Process อื่นอยู่แล้ว ในขั้นตอนนี้ เราจะระบุ Port ที่ Process จะ Bind

  1. คุณอาจใช้คำสั่งนี้สร้าง Process:
     $ python -m SimpleHTTPServer
  2. แทนที่จะใช้คำสั่งนั้น ให้ใช้คำสั่งนี้:
     $ python -m SimpleHTTPServer (Port Number)
  3. รอ Process สร้าง และตรวจสอบว่าปัญหายังคงอยู่หรือไม่

Solution 2: ปลดปล่อย Port (Freeing up the Port)

หาก Port ใช้งานโดย Process อื่น Process ใหม่จะไม่ทำงานบน Port นั้นได้ ในขั้นตอนนี้ เราจะปลดปล่อย Port โดย Terminate Process ก่อนหน้า แล้วรัน Process ใหม่ วิธีทำ:

  1. ใช้คำสั่งนี้ List Processes ที่ใช้ Port เฉพาะ:
    $ ps -fA | grep python
  2. Command Argument จะคล้ายบรรทัดนี้:
     601 88234 12788 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
  3. จากนี้ Process Code ที่ใช้ Kill คือ "88234"
  4. ใช้คำสั่งนี้ Kill Process:
    kill 88234

    หรือใช้คำสั่งนี้:

    sudo kill -9 PID
  5. ตอนนี้คุณสามารถ Bind Process กับ Port นี้ได้ด้วยคำสั่ง:
     $ python -m SimpleHTTPServer (Port Number)
  6. Process จะถูกสร้าง

Solution 3: Restart Raspberry Pi (เฉพาะ Raspberry Pi)

คุณสามารถแก้ Error นี้บน Raspberry Pi ได้โดย Restart Raspberry Pi หรือ Kill Terminal Shell Raspberry Pi บางครั้งไม่สามารถ Kill Processes อัตโนมัติได้ ทำให้ Error เกิดจาก Process ก่อนหน้าที่ยังรันอยู่บน Ports