连续尝试连接蓝牙插座,直到连接成功

时间:2016-09-17 07:30:48

标签: python 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只是主机。

1 个答案:

答案 0 :(得分: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

上面的connect方法将在无限循环(下面显示的代码)内部调用,只有当从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"