在我正在开发的程序中,我有两个设备通过蓝牙相互通话。当应用程序第一次启动时,两个设备连接正常,但是当连接被切断并重新初始化(即服务器线程被终止然后重新创建)时,尽管BluetoothServerSocket
已经接受连接,但它仍然失败。在服务器端,我有蓝牙ServerSocket不接受
void handleConnection() throws Exception {
bss = BluetoothAdapter.getDefaultAdapter().listenUsingRfcommWithServiceRecord(Constants.BITMAP_NAME,
UUID.fromString(Constants.BITMAP_UUID));
running.set(true);
Logger.logE("accepting");
BluetoothSocket socket = bss.accept();
Logger.logE("accepted");
context.runOnUiThread(new Runnable() {
@Override
public void run() {
if (connectionCallback != null)
connectionCallback.onConnectionMade();
}
});
//handle connection in a loop...
try {
is.close();
is = null;
} catch (IOException ignored) {
Logger.exception(ignored);
}
try {
socket.close();
socket = null;
} catch (IOException ignored) {
Logger.exception(ignored);
}
}
而且在客户端上我有
void handleConnection() throws Exception {
BluetoothSocket socket = connect.
createRfcommSocketToServiceRecord(UUID.fromString(Constants.BITMAP_UUID));
Logger.logE("preparing to connect");
socket.connect();
Logger.logE("Connected");
if (connectionCallback != null) {
context.runOnUiThread(new Runnable() {
@Override
public void run() {
connectionCallback.onConnectionMade();
}
});
Logger.logE("callback fired");
}
//Handle the connection...
Logger.logE("closing client");
try {
os.close();
os = null;
} catch (Exception ex) {
Logger.exception(ex);
}
try {
socket.close();
socket = null;
} catch (Exception ex) {
Logger.exception(ex);
}
}
重新启动服务器,并尝试重新连接,客户端超时与消息
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
后在socket.connect();
行。在监视客户端时,我在Logcat中看到消息preparing to connect
,而在监视服务器时看到消息accepting
,但它从未超出这一点。
您能否详细说明“何时连接被切断并重新初始化”以及在哪个语句抛出错误(java.io.IOException:读取失败,套接字可能关闭或超时,读取ret:-1)? – solosodium
@solosodium为你更新了它。 – sjyn