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...