2016-09-17 40 views
1

接続が成功するまで、Bluetoothデバイスに接続しようとします。以下のコードでは再帰呼び出しを使用しており、これにより最大レベルの再帰が満たされる可能性があります。接続が成功するまでBluetoothソケットの接続を継続しよう

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例外がキャッチされたときにエラーフラグを返すことで実現できます。

そう除くブロックで、代わりに右が再接続しようとすると、我々はエラーフラグ(例えば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 

上記のconnectメソッドは無限ループ(コードの内部で呼び出されます接続関数から成功が返されたときにのみ破棄されます)。それ以外の場合は、connectメソッドが継続的に呼び出されます。

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"