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

2022-04-06 07:54:48 字數 3536 閱讀 3274

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

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

埠被佔的處理: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"[來自的訊息:\n")

print(f"[來自的訊息:]")

# bind_and_activate=false 手動繫結和啟用

with threadingtcpserver(('', 8080), myhandler, false) as server:

# 防止埠占用

server.socket.setsockopt(sol_socket, so_reuseaddr, 1)

server.server_bind() # 自己繫結

server.server_activate() # 自己啟用

server.serve_forever()

if __name__ == "__main__":

main()

解決前:

解決後:

這個就涉及到`tcp4次握手`相關的內容了,如果不是長連線,你先斷開客戶端,再斷開服務端就不會遇到這個問題了,具體問題下次繼續**~

有時候會這樣簡化寫(雖然簡化了,但有時候也會出現埠占用的情況)

from socket import sol_socket, so_reuseaddr

from socketserver import threadingtcpserver, baserequesthandler

class myhandler(baserequesthandler):

def handle(self):

print(f"[來自的訊息:]")

# 防止埠占用

threadingtcpserver.allow_reuse_address = true

with threadingtcpserver(('', 8080), myhandler) as server:

server.serve_forever()

if __name__ == "__main__":

main()

原始碼比較簡單,一看就懂:

def __init__(self, server_address, requesthandlerclass, bind_and_activate=true):

baseserver.__init__(self, server_address, requesthandlerclass)

self.socket = socket.socket(self.address_family,

self.socket_type)

if bind_and_activate:

try:

# 看這

self.server_bind()

self.server_activate()

except:

self.server_close()

raise

def server_bind(self):

# 看這

if self.allow_reuse_address:

self.socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

self.socket.bind(self.server_address)

self.server_address = self.socket.getsockname()

Linux下埠被占用解決

原文 有時候關閉軟體後,後台程序死掉,導致埠被占用。下面以jboss埠8083被占用為例,列出詳細解決過程。解決方法 1.查詢被占用的埠 netstat tln netstat tln grep 8083 netstat tln 檢視埠使用情況,而netstat tln grep 8083 則是只檢...

Linux下埠被占用解決

有時候關閉軟體後,後台程序死掉,導致埠被占用。下面以jboss埠8083被占用為例,列出詳細解決過程。解決方法 1.查詢被占用的埠 netstat tln netstat tln grep 8083 netstat tln 檢視埠使用情況,而netstat tln grep 8083 則是只檢視埠8...

Linux下埠被占用解決

linux下埠被占用解決 leo chin 有時候關閉軟體後,後台程序死掉,導致埠被占用。下面以jboss埠8083被占用為例,列出詳細解決過程。解決方法 1.查詢被占用的埠 netstat tln netstat tln grep 8083 netstat tln 檢視埠使用情況,而netstat...