Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Bluetooth将多个客户端连接到一台主机_Java_Android_Mobile_Bluetooth - Fatal编程技术网

Java Android Bluetooth将多个客户端连接到一台主机

Java Android Bluetooth将多个客户端连接到一台主机,java,android,mobile,bluetooth,Java,Android,Mobile,Bluetooth,情况是这样的。我正在创建一个安卓系统,它利用蓝牙来更新相互连接的客户端的状态。这个想法是让蓝牙连接的主机保存一个多维数组,该数组保存所有这些数据。每次客户端更新主机的新状态时,主机都会更新阵列中的数据,然后将数据发送给所有客户端 当然,这听起来像是牛奶和饼干,但不幸的是,事实并非如此。我知道我需要在每一端都有一个蓝牙插座,其中一个插座必须是主机插座。所以,完成一个连接似乎很简单。但是如果我想接受更多的连接呢?我一直在阅读,显然我必须为每个连接创建一个新线程。我不知道这是怎么回事,有人能解释一下吗

情况是这样的。我正在创建一个安卓系统,它利用蓝牙来更新相互连接的客户端的状态。这个想法是让蓝牙连接的主机保存一个多维数组,该数组保存所有这些数据。每次客户端更新主机的新状态时,主机都会更新阵列中的数据,然后将数据发送给所有客户端


当然,这听起来像是牛奶和饼干,但不幸的是,事实并非如此。我知道我需要在每一端都有一个蓝牙插座,其中一个插座必须是主机插座。所以,完成一个连接似乎很简单。但是如果我想接受更多的连接呢?我一直在阅读,显然我必须为每个连接创建一个新线程。我不知道这是怎么回事,有人能解释一下吗?

每个连接都需要一个线程的原因是:

假设您有两个打开的插座,sock1和sock2。要读取这些套接字,可以调用

InputStream in1 = sock1.getInputStream();
InputStream in2 = sock2.getInputStream();
现在,要阅读sock1,您可以调用

in1.read(buffer);
其中“buffer”是一个字节数组,用于存储读取的字节

但是,read()是一个阻塞调用——换句话说,它不会返回,并且在有一些字节要读取()之前,您无法执行下一行。因此,如果你试图阅读sock1,你将永远无法阅读sock2,反之亦然,如果它们在同一个线程中

因此,如果每个连接有一个线程,那么每个线程都可以调用read(),并等待输入。如果输入在另一个线程执行时出现,它将等待该线程的轮到,然后继续执行

要真正实现这一点,您所需要做的就是将处理一个连接的代码粘贴到扩展线程的类中


这里涉及到很多细节,我建议将其作为一个很好的教程。

谢谢您的回复。我之前看过BluetoothChat示例,但我想我对代码不够熟悉,无法理解它。然而,我浏览了文档,看起来很简单,但有一部分让我不知所措。我是否应该让serversocket在线程上保持打开状态以继续接受连接,然后将其传递给可以处理蓝牙套接字的方法?是的,这就是我在使用蓝牙时使用的策略好的,非常感谢你的回答,顺便说一下,我可以告诉你你在说什么。很遗憾你不能在stackoverflow上给人们留言,否则我会让你回答其他可能出现的问题><无论如何,再次感谢。。。