最近正在做一个蓝牙传输的应用,其实对于蓝牙的要求很简单,和一般用socket做echo system的感觉差不多,不过自己怎么编都玩不转。分两部分,客户端和服务器,客户端为了省电,一律只听不搜,搜索和connect的活儿都是服务器做的,为了满足客户端和服务器都是多个且异步的要求,在传输的基础上应用了多线程,下面是我的大致流程:client server
开始监听
开始发现
发现的所有设备保存到一个ArrayList里
发现开始10秒后取消发现
对ArrayList里的每个设备尝试验证UUID和connect
(新线程) (新线程)
accept到设备 connect成功
获取相应socket 获取相应socket
发送数据 接收数据
等待0.5秒 处理数据
接收数据 发送数据
关闭socket 关闭socket
(结束新线程) (结束新线程)我的问题出现在服务器处理完数据后的送回数据失败,用是抛出IOException,客户端也抛。这还没做多个测试,还只是一对一呢就传不明白了,请明白的兄弟帮一把,我查了不少介绍蓝牙编程的网页了,也都是说说用法讲讲理论,这种实际出的问题根本没什么帮助……
开始监听
开始发现
发现的所有设备保存到一个ArrayList里
发现开始10秒后取消发现
对ArrayList里的每个设备尝试验证UUID和connect
(新线程) (新线程)
accept到设备 connect成功
获取相应socket 获取相应socket
发送数据 接收数据
等待0.5秒 处理数据
接收数据 发送数据
关闭socket 关闭socket
(结束新线程) (结束新线程)我的问题出现在服务器处理完数据后的送回数据失败,用是抛出IOException,客户端也抛。这还没做多个测试,还只是一对一呢就传不明白了,请明白的兄弟帮一把,我查了不少介绍蓝牙编程的网页了,也都是说说用法讲讲理论,这种实际出的问题根本没什么帮助……
private class ConnectTimeOut extends Thread{
private BluetoothSocket oneSocket;
private BluetoothDevice oneDevice;
private int id;
public ConnectTimeOut(BluetoothSocket oneSocket){
this.oneSocket = oneSocket;
this.id = (int)Thread.currentThread().getId();
Log.i(TAG, Thread.currentThread().getName()+" started");
}
@Override
public void run() {
ReceiveOne receiveOne = new ReceiveOne(oneSocket, id);
try {//receive section with time out 1 second
receiveOne.start();
receiveOne.join(1000);
} catch (InterruptedException e) {
Log.i(TAG, "receive time out");
}
if(receiveOne.isAlive()){
receiveOne.interrupt();
this.interrupt();
}
//process shopping list
try {
sleep(300);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
for(Message oneProduct:shoppingChoiceList){
Log.i(TAG, "processed one product: "+oneProduct.obj);
}
TransmitOne transmitOne = new TransmitOne(oneSocket, id);
try {//transmit section with time out 1 second
transmitOne.start();
transmitOne.join(1000);
} catch (InterruptedException e) {
Log.i(TAG, "transmit time out");
}
if(transmitOne.isAlive()){
transmitOne.interrupt();
}
}
}
try {//transmit section with time out 1 second
transmitOne.start();
transmitOne.join(1000);
} catch (InterruptedException e) {
Log.i(TAG, "transmit time out");
}
不清楚你的IOException具体点是什么Exception,这段代码究竟是做什么。