1. 程式人生 > >Linux埠被佔用的解決(附Python專版)

Linux埠被佔用的解決(附Python專版)

先說一般情況的解決:

lsof -i:8000 查出PID,然後 kill掉程式,接著就可以了


軟體重啟之後繫結沒有釋放,lsof -i:8080也查不出來佔用的情況

再來個長連線版Python解決法:(軟體重啟之後繫結沒有釋放,lsof -i:8080也查不出來佔用的情況)

OSError: [Errno 98] Address already in use

埠被佔的處理: tcp_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)

一般情況圖示:

解決後圖示:

完整示例程式碼:

from socket import socket, SOL_SOCKET, SO_REUSEADDR

def main():
    with socket() as tcp_socket:
        # 防止端口占用
        tcp_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        # 繫結埠
        tcp_socket.bind(('', 8080))
        # 監聽
        tcp_socket.listen()
        # 等待
        client_socket, address = tcp_socket.accept()
        # 收發訊息
        with client_socket:
            print(f"[來自{address}的訊息:\n")
            msg = client_socket.recv(2048)
            if msg:
                print(msg.decode("utf-8"))
            client_socket.send(
                """HTTP/1.1 200 ok\r\nContent-Type: text/html;charset=utf-8\r\n\r\n<h1>哈哈哈</h1>"""
                .encode("utf-8"))

if __name__ == "__main__":
    main()