gpt4 book ai didi

Android + Bluetooth (Bluecove) - 需要关闭 OutputStream 才能真正写入数据

转载 作者:行者123 更新时间:2023-11-29 21:57:23 26 4
gpt4 key购买 nike

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

来自客户端的代码 fragment :

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 消息“套接字已关闭"被抛出。但是,当 osw.close(); 被注释时,客户端和服务器都卡住:A. 客户端当然卡在读取服务器的响应上B.服务器卡在streamConnNotifier.acceptAndOpen();

应该怎样做才能实现双向通信?我的代码、PC 蓝牙协议(protocol)栈或 bluecove 是罪魁祸首吗?

最佳答案

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

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

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

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

关于Android + Bluetooth (Bluecove) - 需要关闭 OutputStream 才能真正写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12904341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com