簡體   English   中英

通過sock.recv和socket.timeout檢測套接字何時斷開連接

[英]Detecting when socket gets disconnected via sock.recv and socket.timeout

我具有此功能來檢測套接字連接的狀態(已連接或已斷開):

def connection_status(self):

        try:

            sock.settimeout(2)
            connection_status = sock.recv(32)
            print("Status: Connected")
            self.label_connection_status['text'] = 'Status: Connected'
            self.label_connection_status['fg'] = 'green'

        except socket.timeout:

            connection_status = ""
            print("Status: Disconnected")
            self.label_connection_status['text'] = 'Status: Disconnected'
            self.label_connection_status['fg'] = 'red'

        self.master.after(3000, self.connection_status)

但是有一個問題。 當我連接到服務器(在我的情況下為Samsung TV,它是其遠程控制應用程序)時,它發送幾次垃圾郵件“狀態:已連接”,但幾秒鍾后變為“狀態:已斷開”(但仍處於連接狀態...),如果我向服務器(三星電視)發送了一些數據,它再次變為“已連接”,幾秒鍾后又變為“已斷開”。 而且我停止了服務器(三星電視),它只輸出“狀態:已連接”!

為什么將recv()與連接/斷開連接混淆? recv()被超時中斷只是意味着在指定的時間段內沒有接收到任何數據,但絕不是表示斷開連接! 相反,正常斷開連接不會在recv()上表現為超時,而是從recv()返回具有適當狀態的狀態,指示斷開事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM