情况如下。我正在创建一个利用蓝牙来更新彼此状态的连接客户端的Android。这个想法是让蓝牙连接的主机保持一个包含所有这些统计数据的多维数组。每次客户端更新主机的新状态时,主机都会更新阵列中的数据,然后将其发送给所有客户端。
当然,这对我来说听起来像牛奶和饼干,但遗憾的是它不是。我知道我需要在每端都有一个蓝牙插座,其中一个需要是主机插座。所以,完成一个连接看起来很简单。但是,如果我想接受更多连接怎么办?我一直在阅读,显然我必须为每个连接创建一个新线程。我不明白这是怎么回事,有人可以解释一下吗?
答案 0 :(得分:2)
每个连接需要一个线程的原因是:
想象一下,你有两个打开的套接字,sock1和sock2。要从这些套接字中读取,您可以调用类似
的内容InputStream in1 = sock1.getInputStream();
InputStream in2 = sock2.getInputStream();
现在,要从sock1读取,请调用
in1.read(buffer);
其中“buffer”是一个字节数组,您可以在其中存储您读取的字节。
然而,read()是一个阻塞调用 - 换句话说,它不会返回,并且你不会执行下一行,直到有一些字节要读取()。因此,如果您尝试读取sock1,那么如果它们位于同一个线程中,您将永远不会读取sock2,反之亦然。
因此,如果每个连接有一个线程,则每个线程都可以调用read(),并等待输入。如果在其他一个线程正在执行时输入,它会一直等到线程轮到,然后继续。
要实际实现这一点,您需要做的就是坚持使用代码来处理扩展Thread的类的一个连接。
涉及很多细节 - 我建议将Android BluetoothChat sample作为一个很好的教程。