RFCOMM用于通道的多个连接

时间:2015-01-23 08:07:55

标签: android bluetooth bluez rfcomm

我正在实施支持多个客户端的蓝牙服务器。我正在使用RFCOMM协议。是否可以为同一个RFCOMM频道连接多个客户端?

(C ++)的服务器代码:

int client;
std::list<boost::thread *> pool;
boost::thread *t;
struct sockaddr_rc loc_addr = { 0 }, rem_addr = { 0 };
socklen_t opt = sizeof(rem_addr);
int s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
loc_addr.rc_family = AF_BLUETOOTH;
loc_addr.rc_bdaddr = {0, 0, 0, 0, 0, 0};
loc_addr.rc_channel = (uint8_t) 1;
fflush(stdout);
bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr));
fflush(stdout);
listen(s, 1);
while(1){
    client = accept(s, (struct sockaddr *) &rem_addr, &opt);
    cout << "Accepted " << endl;
    t = new boost::thread(&read_data,client, this);
    pool.push_back(t);
    t->join();
}

read_data是连接处理函数

客户端通过此代码(Java / Android)连接:

        ...
        BluetoothDevice mmDevice = mBluetoothAdapter
            .getRemoteDevice(serverAddress);
        String data;
        Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
        clientSocket = (BluetoothSocket) m.invoke(mmDevice, 1);
        ...

来自第一台设备的客户端已成功连接并从服务器发送/接收数据。第二个设备的客户端成功连接到服务器。我可以在android日志中看到这条消息:

D/BluetoothEventLoop(  194): Device property changed: 00:15:83:3D:0A:57 property: Connected value: true

但是没有第二个&#34;接受&#34;来自服务器的消息,连接后没有收到第二个客户端的数据。

0 个答案:

没有答案