我正在实施支持多个客户端的蓝牙服务器。我正在使用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;来自服务器的消息,连接后没有收到第二个客户端的数据。