我使用蓝牙编程做一个联机游戏。
大家都知道蓝牙编程是用socket和输入输出流socket.getInputStream();这样的语句进行连接对应。
但是到了真正使用的时候才发现了问题。
当我在一台手机发送信息之后,接着不久又再发送一段信息,有时就会出现错误了。
蓝牙的读取使用bytes = mmInStream.read(buffer);buffer的定义:byte[] buffer = new byte[1024],bytes是一个整型,用来记录信息的长度。mmInStream是一个InputStream的对象且已经通过上面的socket语句连接完成。
出现的错误就是,由于信息的发送时间间隔可能是比较短吧(但确实分两次发送),我在另外一台手机里面接收信息,然后通过信息判断对应信息该执行的操作动画效果之类的。但是当我接收到信息的时候有时候却是两个信息连在一起的,合成了一个信息,导致我接收方对信息的判断出错。
我对socket和输入输出流不太了解,只知道简单的应用,求解造成这情况的原因和解决方法!
在线等答复!
还需要我提供什么测试数据或者是相关代码的敬请跟帖回复!
大家都知道蓝牙编程是用socket和输入输出流socket.getInputStream();这样的语句进行连接对应。
但是到了真正使用的时候才发现了问题。
当我在一台手机发送信息之后,接着不久又再发送一段信息,有时就会出现错误了。
蓝牙的读取使用bytes = mmInStream.read(buffer);buffer的定义:byte[] buffer = new byte[1024],bytes是一个整型,用来记录信息的长度。mmInStream是一个InputStream的对象且已经通过上面的socket语句连接完成。
出现的错误就是,由于信息的发送时间间隔可能是比较短吧(但确实分两次发送),我在另外一台手机里面接收信息,然后通过信息判断对应信息该执行的操作动画效果之类的。但是当我接收到信息的时候有时候却是两个信息连在一起的,合成了一个信息,导致我接收方对信息的判断出错。
我对socket和输入输出流不太了解,只知道简单的应用,求解造成这情况的原因和解决方法!
在线等答复!
还需要我提供什么测试数据或者是相关代码的敬请跟帖回复!
解决方案 »
- 新手学习android,求帮助
- 书上的示例需要android api 9怎么办?
- socket客户端不断发送图片,服务端只能显示出第一张
- adb push (read-only file system)
- 话说用ndk创建的可执行程序(不是库)在sd卡上怎么没权限?
- android cursor 问题
- android新手在线求教为什么使用POI jar包的时候报这样的错
- android 调用JNI函数然后死掉,报错 Fatal signal 11
- 华为手机从应用市场下载后,出现无法点击情况,从其他渠道下载安装没问题,相同的apk
- 求助各位大神安卓7.0的智能触摸终端没反应的问题
- you are office feint requires an active network connection
- 大侠请进,android listview添加单选按钮。为什么总是多选
按照这样的传输机制的话,那么如果我的信息量不足1024个字节的话,我也需要补充满1024个字节……感觉这样对于信息传输通道会不会造成过多的不必要的数据包大小?还有就是我还需要在发送信息之前检查信息量是否完全充满了1024个字节数,如果不足我还需要调用相关函数进行补充。这样是不是也会造成发送信息这端执行的效率过低?假如我要采用你说的这种补充满1024个字节的发送信息机制,那么请问可不可以提供一个比较方便的函数调用给我参考一下?谢谢!
public void writeFixedString(String s,int size,DataOutput out) throws IOException{
for (int i = 0; i < size; i ++) {
char c = 0;//用0填充
if (i < s.length()) {
ch = s.charAt(i);
}
out.writeChar(ch);
}
}
接受端做相应的处理。个人的想法,希望能帮到你。
首先,谢谢你的答复。
您最后的回复是写了一个客户端发送的信息生成函数,将要发送的信息通过自己的定制的长度和字符串形成一个固定长度的信息。其中调用了一个for循环和String串中的char的赋值,我不太懂时空代价的具体计算,但我总觉得这样的一个循环会浪费太多的时间,特别是当信息的长度有时比较大有时比较小的时候。比如1024个字节,有时需要用到将近1024个字节,有时却只需发送几个字节的消息,但是我每次都需要将剩余的空间补足到1024个字节再发送,那就相当的浪费了~