Я пытаюсь создать соединение между Android-смартфоном (клиентом) с Bluetooth приложение (сервер), запущенное на ПК.Ошибка соединения с Bluetooth-сервером с сервером Bluetooth-ПК «ava.io.IOException: чтение не удалось, сокет может быть закрыт или таймаут, прочитать ret: -1»
Ниже приведен фрагмент кода для клиента
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private class ConnectThread extends Thread {
private BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
public ConnectThread(BluetoothDevice device) {
mmDevice = device;
BluetoothSocket tmp = null;
try {
//tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
Log.d(TAG, "create() failed", e);
e.printStackTrace();
}
mmSocket = tmp;
}
public void run() {
mAdapter.cancelDiscovery();
try {
mmSocket.connect();
}
catch (IOException e) {
//Exception caught
//java.io.IOException: read failed, socket might closed or timeout, read ret: -1
...
}
...
}
Ниже приведен код сервера (Использует BlueCover баночку)
собственной недействительным waitForConnection() { LocalDevice локальный = NULL;
StreamConnectionNotifier notifier;
StreamConnection connection = null;
try {
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);
String uuidstr = "00001101-0000-1000-8000-00805F9B34FB";
String uuid_wo_space = uuidstr.replaceAll("-", "");
String url = "btspp://localhost:" + uuid_wo_space + ";authenticate=false;encrypt=false;name=RemoteBluetooth";
notifier = (StreamConnectionNotifier) Connector.open(url);
}
catch (Exception e) {
e.printStackTrace();
return;
}
// waiting for connection
while(true) {
try {
connection = notifier.acceptAndOpen();
Thread processThread = new Thread(new ProcessConnectionThread(connection));
processThread.start();
}
catch(Exception e) {
e.printStackTrace();
return;
}
}
Я прочитал несколько ссылок, предполагающие изменить UUID на «00001101-0000-1000-8000-00805F9B34FB», который я уже пробовал. Я также попытался создать небезопасный сокет, используя createInsecureRfcommSocketToServiceRecord, который по-прежнему терпит неудачу с тем же результатом.
Ниже стек IOException след
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:900)
at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:912)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:531)
Когда я проверить BluetoothSocket.java, я вижу способ подключения после открытия сокета пытается прочитать значение канала из входного потока, который в моем случае неисправный. Не уверен, что это за значение канала и почему он не подходит для меня. Любые предложения по этому вопросу будут полезны. – Sumeet