Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.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 InputStream.available()在侦听不断传输数据的Bluetooth RFCOMM服务器时不报告任何字节_Java_Bluetooth_Client - Fatal编程技术网

Java InputStream.available()在侦听不断传输数据的Bluetooth RFCOMM服务器时不报告任何字节

Java InputStream.available()在侦听不断传输数据的Bluetooth RFCOMM服务器时不报告任何字节,java,bluetooth,client,Java,Bluetooth,Client,我正试图用Java编写一个简单的脚本,从一个蓝牙设备读取数据,该设备会输出恒定的数据流。我知道这个设备正在工作,因为我可以用Python解决我的问题,但我最终还是想用Java 我有一些示例代码,但它挂起在read命令上 // Ref http://homepages.ius.edu/rwisman/C490/html/JavaandBluetooth.htm import java.io.*; import javax.microedition.io.*; //import javax.blue

我正试图用Java编写一个简单的脚本,从一个蓝牙设备读取数据,该设备会输出恒定的数据流。我知道这个设备正在工作,因为我可以用Python解决我的问题,但我最终还是想用Java

我有一些示例代码,但它挂起在read命令上

// Ref http://homepages.ius.edu/rwisman/C490/html/JavaandBluetooth.htm
import java.io.*;
import javax.microedition.io.*;
//import javax.bluetooth.*;

public class RFCOMMClient {
    public static void main(String args[]) {
    try {
        StreamConnection conn = (StreamConnection) Connector.open(
        "btspp://00078093523B:2", Connector.READ, true);

        InputStream is = conn.openInputStream();

        byte buffer[] = new byte[8];
        try {
            int bytes_read = is.read(buffer, 0, 8);
            String received = new String(buffer, 0, bytes_read);
            System.out.println("received: " + received);
        } catch (IOException e) {
            System.out.println(" FAIL");
            System.err.print(e.toString());
        }
        conn.close();
    } catch (IOException e) {
        System.err.print(e.toString());
    }
}
}

请注意,问题似乎是read()调用认为没有可用的数据。然而,蓝牙设备不断地输出数据(它是一个传感器)。下面是我的Python代码,它确实有效:

In [1]: import bluetooth

In [2]: address = "00:07:80:93:52:3B"

In [3]: s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)

In [4]: s.connect((address,1))

In [5]: s.recv(1024)
Out[5]: '<CONFIDENTIALDATAREMOVED>'
[1]中的
:导入蓝牙
在[2]中:address=“00:07:80:93:52:3B”
In[3]:s=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
在[4]中:s.connect((地址,1))
In[5]:s.recv(1024)
出[5]:“”
请帮忙


谢谢

读取将阻塞并等待数据;更好的习惯用法是使用available()


谢谢六羟甲基三聚氰胺六甲醚。。。available()返回0,因此它不读取任何内容。然而,该设备不断地输出数据(它是一个传感器)。这是我在运行Java代码后立即尝试的python代码:在[1]中:在[3]中的[2]中导入bluetooth:address=“00:07:80:93:52:3B]:在[5]中的[4]:s.connect((地址,1)):s.recv(1024)Out[5]:'secretentialDataRemoved'Hmm.尝试使用openDataInputStream()而不是openInputStream(),并查看行为是否发生变化?我想不会,但值得一试。我也有这个问题
int bytesToRead = is.available();
if(bytesToRead > 0)
    is.read(buffer, 0, bytesToRead);
else
    // wait for data to become available