【发布时间】: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