Linux埠被佔用的解決(附Python專版)
阿新 • • 發佈:2018-11-22
先說一般情況的解決:
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()