【问题标题】:Android + Bluetooth (Bluecove) - need to close the OutputStream to actually write dataAndroid + 蓝牙 (Bluecove) - 需要关闭 OutputStream 才能真正写入数据
【发布时间】:2012-10-15 21:30:54
【问题描述】:

我有 Android 设备作为客户端,PC 是蓝牙服务器,使用 Bluecove 库

来自客户端的代码 sn-p:

btSocket = serverBt.createRfcommSocketToServiceRecord(myUuid);
btAdapter.cancelDiscovery();
btSocket.connect();

InputStream in = btSocket.getInputStream();
OutputStream out = btSocket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out);
InputStreamReader isr = new InputStreamReader(in);
osw.write(55);
osw.flush();
out.flush();
//osw.close();
logTheEvent("Stuff got written, now waiting for the response.");
int dummy = isr.read();
logTheEvent("Servers response: "+ new Integer(dummy).toString());

还有服务器:

StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open( connectionString, Connector.READ_WRITE );
StreamConnection incomingConnection=streamConnNotifier.acceptAndOpen();
InputStream in = incomingConnection.openInputStream();
OutputStream out = incomingConnection.openOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out);
InputStreamReader isr = new InputStreamReader(in);
int fromClient = isr.read();
System.out.println("Got from client " + new Integer(fromClient).toString());
osw.write(999);

当客户端的 osw.close(); 被取消注释时,消息被传输到服务器,但是,客户端无法接收响应,IOException with message "socket already closed "被抛出。 但是,当 osw.close(); 被注释时,客户端和服务器都会冻结: A. 客户端当然挂在读取服务器的响应上 B. 服务器挂在streamConnNotifier.acceptAndOpen();

应该怎么做才能启用双向通信? 是我的代码、PC 蓝牙堆栈还是 bluecove 的错?

【问题讨论】:

    标签: android bluetooth bluecove


    【解决方案1】:

    蓝牙使用缓冲输出。这意味着有一个小的内存位置包含您写入流的所有数据。当此内存位置已满时,它将缓冲区数据以数据包的形式写入套接字。当您过早关闭套接字时,该缓冲区会被擦除,数据也会消失。

    为了强制流写入,请尝试调用flush()

    您可以做的其他事情是将缓冲区大小设置为非常小,以便始终写入数据。但是,如果这样做,性能不会很好。

    不幸的是,我没有我写的所有代码,但是有一个基础项目here

    【讨论】:

    • 这就是问题所在,在客户端刷新输出流几乎没有任何作用
    • 我不确定,那么,抱歉。自从我为此苦苦挣扎以来已经有几年了。 :)
    • 再想一想,只是在套接字中写入了很多很多整数,瞧!,它们被传输了 :) 所以看起来确实需要达到缓冲区大小才能在不关闭数据的情况下推送数据流。
    • 太棒了! :) 你能把这个标记为已回答,以便其他人可以看到吗?
    猜你喜欢
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2021-07-03
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多