2016-09-17 136 views
1

我想繼續嘗試連接到藍牙設備,直到連接成功。下面的代碼使用遞歸調用,這可能會導致滿足遞歸的最大級別。連續嘗試連接藍牙套接字直到連接成功

是否BluetoothSocket.connect()返回成功或失敗的值?

def connect(self): 

    # the bluetooth device uses port 1 
    port = 1 

    if not self.quit: 
    try: 
     print 'Attempting Connection...' 
     # Create the client socket 
     self.socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
     self.socket.connect((self.bt_mac, port)) 
    except bluetooth.btcommon.BluetoothError: 
     self.connect() 
    return self.SUCCESS 

的文檔指出以下幾點:

connect(self, addrport) 

connect(addrport) 

可用性:GNU/Linux的,Windows XP中

插座連接到遠程設備。對於L2CAP套接字,addrport是一個(host,psm)元組。對於RFCOMM插座,addrport是一個(host,channel)元組。對於SCO插座,addrport是房東。

回答

0

BluetoothSocket.connect()未明確返回表示成功或失敗的值。但是,當bluetooth.btcommon.BluetoothError異常被捕獲時,可以通過返回錯誤標誌來實現。

在except塊

因此,而不是試圖再次連接在那裏,我們可以返回一個錯誤標誌(例如self.ERROR = -1

def connect(self): 
    # the bluetooth device uses port 1 
    port = 1 

    try: 
     print 'Attempting Connection...' 
     # Create the client socket 
     self.socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
     self.socket.connect((self.bt_mac, port)) 
     except bluetooth.btcommon.BluetoothError: 
     return self.ERROR 
     return self.SUCCESS 

上述連接方法將一個無限循環的內部調用(代碼如下所示),只有從連接功能返回成功時纔會中斷。否則,連接方法將不斷被調用。

while True: 
    # connect to device 
    res = mydevice.connect() 
    # print connection status -1=fail, 0=success 
    if res == SUCCESS: 
     print "Success" 
     # break out of connection loop if success 
     break 
    if res == ERROR: 
     print "Failed"