簡體   English   中英

套接字斷開連接時退出 Python While 循環

[英]Exit Python While Loop when socket disconnects

我有一些代碼可以從 Raspberry Pi 接收 WiFi 密碼。 Pi 每 2 分鍾發出一個新代碼。 下面的腳本檢查密碼並在需要時使用新密碼更新連接。

        # Create a TCP/IP socket

s=socket(AF_INET, SOCK_DGRAM)


# Bind the socket to the port
s.bind (('',4446))
s.settimeout(10.0)
print ("Listening . . . .")

data=s.recv(1024).decode()
print ("Password:  "+data)
os.system('netsh wlan set profileparameter name=PI_AP Keymaterial='+data)
var1=data

try:
    while 1:
        data=s.recv(1024).decode()
        print ("Password:  "+data)

        if var1!=data:
            os.system('netsh wlan set profileparameter name=PI_AP Keymaterial='+data)
            print ("Password:  "+data)
            var1=data

except socket.timeout:
    print ("Timed Out")

這是輸出,以及我在斷開連接后看到的錯誤消息:

>>> ================================ RESTART ================================
>>> 
Listening . . . .
Password:  m9FyvpJCILQrZB4sq125AfUn9nfS9Z6qDlbBxy12pL48y5kJTLrH01osp4xXWN3
Password:  m9FyvpJCILQrZB4sq125AfUn9nfS9Z6qDlbBxy12pL48y5kJTLrH01osp4xXWN3
Password:  m9FyvpJCILQrZB4sq125AfUn9nfS9Z6qDlbBxy12pL48y5kJTLrH01osp4xXWN3
 **Traceback (most recent call last): File "C:\\Users\\cave\\Desktop\\system_V1\\UAD-V1.0.py", line 21, in <module> data=s.recv(1024).decode() socket.timeout: timed out During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\\Users\\cave\\Desktop\\system_V1\\UAD-V1.0.py", line 29, in <module> except socket.timeout: TypeError: catching classes that do not inherit from BaseException is not allowed >>>**

如果斷開連接,您應該收到套接字斷開連接異常或空數據(如您在 if 中測試的那樣)。

如果您沒有收到異常(這有點尷尬),您可以使用select (低級)或selectors (高級)模塊來查看是否在線上收到數據。

您可以設置 2 分鍾的超時時間,之后select()函數將拋出異常。

更新:

為了捕獲超時異常,請像這樣包裝您的代碼:

try:
    while 1:
        ...
except socket.timeout:
    print("timed out")
...

更新 2:

好像你正在試圖趕上socket.socket.timeout ,而你需要捕捉socket.timeout 我相信你在上面使用了這一行: from socket import * 如果是這樣,請嘗試捕獲timeout而不是socket.timeout 這就是不推薦from ... import *的原因。

暫無
暫無

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

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