我試圖做一個套接字連接,以保持活着,以便在連接丟失的情況下。所以基本上我想保持服務器始終打開(最好是客戶端),並在連接丟失後重新啓動客戶端。但如果一端關閉了兩端關閉。我通過將兩端都放在同一臺計算機"localhost"
上並單擊X按鈕來模擬此操作。這可能是我的問題的根源嗎?在連接丟失的情況下保持python套接字活着
反正我的連接碼 m.connect(("localhost", 5000))
處於if
和try
和while
例如
while True: if tryconnection: #Error handeling try: m.connect(("localhost", 5000)) init = True tryconnection = False except socket.error: init = False tryconnection = True
而在我的代碼的最後我只是一個m.send("example")
當我按下一個按鈕,如果返回一個錯誤的嘗試重新連接到"localhost"
啓動代碼。而服務器是一個非常通用的服務器設置,在x.accept()
周圍有一個while
循環。那麼在連接關閉時如何保持它們都處於活動狀態,以便它們在重新打開時可以重新連接。或者,我的代碼是否正常,它只是在同一臺計算機上模擬而已?
TCP無法「保持連接處於活動狀態」 - 所以至少有兩個選項:1.使用無連接的UDP,並且在所有需要的層之上分層以使數據傳輸可靠並且流暢,控制(即複製相當多的TCP堆棧:-o或2)繼續使用TCP,但在其上添加一個層,以便當客戶端重新連接客戶端時,將某些特定於客戶端的信息(令牌/ cookie)提供給服務器允許服務器恢復以前的連接。這是您的瀏覽器可以使用cookie恢復與服務器的Web會話的方式。 – barny
你有沒有我如何添加圖層的例子。我比較新。謝謝 – ferret249
當客戶端連接時,如果客戶端沒有保存,客戶端會自動發送一條消息,說明'這是我過去的令牌'或'沒有令牌'。在服務器上,對於新的TCP連接,等待令牌信息並驗證令牌(例如,服務器是否有記錄?是否不太舊?是否用戶註銷?)並進行適當處理。例如如果客戶端已經註銷,則用戶需要重新進行身份驗證。如果沒有註銷,則最近一次連接是最近的,然後恢復會話。這完全是*網站如何記住用戶並在瀏覽器中使用cookie保留購物籃。 – barny