BluetoothServerSocket挂起就接受了

时间:2015-11-01 09:27:00

标签: android sockets bluetooth

我已经看过很多关于这个特定问题的帖子,所有这些帖子的结果都没有帮助我,或者与我的案例有关。

这是我的问题,我正在尝试设置一个蓝牙微微网,一个节点作为服务器,7个作为客户端,每个都给出一个数字作为位置代表从0开始(服务器)并转到7(客户端)。目前我正试图让它只用于两个设备,服务器和一个客户端。而且我认为它们已经配对了。在下面的代码中,uuid是

private UUID uuid=UUID.fromString("0000111f-0000-1000-8000-00805f9b34fb");

这是我接受传入连接的线程,ad只是蓝牙适配器

 private class BTServerThread implements Runnable{

    @Override
    public void run() {
        try {
            if (ad != null) {
                if (ad.isEnabled()) {
                    BluetoothServerSocket btss=ad.listenUsingInsecureRfcommWithServiceRecord("MyApp",uuid);
                    Location=0;
                    Integer loc=1;
                    Log.wtf("Server","Searching");
                    while(loc<=7){
                        Thread t=new Thread(new BTServerHandler(btss.accept(),loc));
                        t.start();
                        Log.wtf("BTS","Found");
                        loc++;
                    }

                } else {
                    Log.e("error", "Bluetooth is disabled.");
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

这是我的客户端线程试图连接

 private class BTClientThread implements Runnable{

    @Override
    public void run() {
        try {
            if (ad != null) {
                if (ad.isEnabled()) {
                    Set<BluetoothDevice> bondedDevices = ad.getBondedDevices();
                    if (bondedDevices.size() > 0) {
                        Iterator<BluetoothDevice> iter = bondedDevices.iterator();
                        BluetoothDevice device = iter.next();
                        Log.wtf("dev", device.getName());
                        BluetoothSocket clientsocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
                        clientsocket.connect();
                        Log.wtf("Connected",device.getName());
                    }

                    Log.e("error", "No appropriate paired devices.");
                } else {
                    Log.e("error", "Bluetooth is disabled.");
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

屏住呼吸,这里是奇怪的部分,呼叫btss.accept()永远挂起(甚至不返回一次),同时,客户端设备以某种方式连接。当我打电话

BluetoothSocket clientsocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
                 clientsocket.connect()

这会挂在手机上的吐司上接受说“DeviceName已连接”然后一段时间后它弹出另一个吐司说“DeviceName已断开连接”,没有我做任何事情,同时服务器电话是仍然挂在接受。

这是我的问题,为什么当吐司弹出说连接时它会挂在接受?当另一部手机仍在收听连接时,它怎么可能连接?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

事实证明,使用那个特定的UUID引起了一些问题,我仍然不明白?在尝试了很多随机的东西后,我终于决定尝试另一个随机的UUID,这神奇地使它起作用。 这是我的新UUID

private UUID uuid = UUID.fromString("56e8a14a-80b3-11e5-8bcf-feff819cdc9f");