有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android蓝牙多客户端到一台主机

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

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    InputStream in1 = sock1.getInputStream();
    InputStream in2 = sock2.getInputStream();
    

    现在,阅读sock1,你可以打电话

    in1.read(buffer);
    

    其中“buffer”是一个字节数组,用于存储读取的字节

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

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

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

    这里有很多细节——我建议Android BluetoothChat sample作为一个好的教程