我正在尝试构建一个Android客户端应用程序,该应用程序使用蓝牙将有关用户执行的手势的数据发送到Java服务器。
当用户执行手势时,应用程序会将有关它的数据发送到电脑
例如(android client send) 5:-24:2
,(java server receive) 5:-24:2
。
只要手势在它们之间执行很长的范围,代码就可以正常工作。
问题是当应用程序以非常快的速度发送数据时(例如,因为用户执行了滚动,因此为每个onScroll(...)
调用了onTouchEvent(...)
。)
然后一条特定的消息被卡住了:
(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok)
(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok)
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck)
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck)
...
java服务器端读取代码:
private StreamConnection mConnection;
public void run() {
try {
InputStream inputStream = mConnection.openInputStream();
System.out.println("waiting for input");
byte[] buffer = new byte[BUFFER_SIZE];
while (true) {
inputStream.read(buffer);
String command = new String(buffer).trim();
System.out.println(command);
}
} catch (Exception e) {
e.printStackTrace();
}
}
android客户端写入方:
private final OutputStream mmOutStream;
String msg = "5:-24:2";
byte[] msgByte = msg.getBytes();
mmOutStream.write(msgByte);
答案 0 :(得分:0)
我做的一个主要错误是使用相同的buffer
而inputStream.read(buffer)
收到不同长度的数据。
我做了以下更改,解决了许多问题。
int length;
while (true) {
length = inputStream.read(buffer);
String command = new String(buffer, 0, length);
System.out.println(command);
}