【问题标题】:Android : BluetoothSocket and InputStream.available()Android:BluetoothSocket 和 InputStream.available()
【发布时间】:2011-12-07 11:33:13
【问题描述】:

我想检查一下BluetoothSocket 是否打开运行...... 这是我的工作:

首先,我从我的 BluetoothSocket 获得一个 InputStream,我想对该 InputStream 执行一些操作,如果发生 IOException,我的程序可以确定套接字已断开连接.....在确保套接字已连接后,我想从中读取一些数据。

为了确保我正在调用available(),它默认返回 0 或字节数......如果返回值为 0,我的读取操作将引发 IOException。

这是我的问题。

  1. available() 是阻塞 I/O 调用还是异步调用?

  2. 仅当我在连接时从我的设备提供一些输入时返回值 >0,但情况并非总是如此。如果有 0 个可用字节,我是否有任何错误允许读取?如何避免这种情况?

【问题讨论】:

    标签: android bluetooth inputstream


    【解决方案1】:

    首先你必须连接蓝牙服务器。使用 connect() 进行连接,此方法将阻塞,直到建立连接或连接失败(导致异常)。所以请确保在单独的线程上运行它。

    public void run() {
        try {
    
            socket.connect();
    
                        InputStream in = socket.getInputStream();
                       //socket connected, inputStream can be used 
                       //Bluetooth
        } catch (IOException e) {
            //Socket is refused connection with the server.
        }
    }
    

    【讨论】:

    • 再次检查问题............尝试正确阅读和理解......
    • 如果您的 socket.connect() 成功,您的蓝牙套接字已准备好读取和发送字节。要读取字节,您必须从服务器发送一些字节,我认为您不会这样做。如果您调用 available() 而不发送任何字节 available() 将返回 0。将异常发布到此处。
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2012-08-18
    • 2011-04-11
    • 2018-04-01
    相关资源
    最近更新 更多