簡體   English   中英

如何檢查套接字是否仍然連接?

[英]How do I check if the socket is still connected?

import socket

ip = '127.1.0.0'
port = 2400

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((ip, port))

clientsocket, address = s.accept()

while True:
    s.listen(10)

    print(f'{address[0]}:{address[1]}')

    msg = clientsocket.recv(8196)
    print(msg.decode(), "\n")

    time.sleep(.05)

這是我的服務器。 每當我關閉客戶端服務器時,while 循環會繼續連續打印地址和端口,直到我終止程序。 如何檢查客戶端是否仍然連接,如果沒有,則關閉它。 我已經嘗試過try和except,並將s.send(bytes())放在try中,並在except中中斷,但是每次我從客戶端向服務器發送消息時,它都會中斷while循環。 我也是套接字編程的新手,所以可能有點亂。

當對方斷開套接字時, recv返回 0 字節(空字符串)。

請注意,這是唯一一次recv返回 0 字節。 否則,它會一直等待,直到有一些字節。 所以你知道如果它接收到 0 個字節,那么另一台計算機就會斷開連接。

注意:在舊版本的 Python 2 中,這意味着 recv 返回"" 在 Python 3 中,它返回b"" 我喜歡寫if len(msg) == 0:來涵蓋這兩種情況,但假設您使用的是 Python 3, if msg == b"":也可以

暫無
暫無

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

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