In einem Programm, an dem ich arbeite, habe ich zwei Geräte, die über Bluetooth miteinander kommunizieren. Wenn die Anwendung zum ersten Mal gestartet wird, werden beide Geräte ordnungsgemäß verbunden. Wenn die Verbindung getrennt und neu initialisiert wird (d. H. Der Serverthread wird beendet und dann neu erstellt), schlägt die Verbindung trotz der akzeptierten Verbindungen fehl. Auf der Serverseite habe ichBluetooth ServerSocket akzeptiert nicht
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);
}
}
Und auf der Client-Seite Ich habe
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);
}
}
Nach dem Neustart des Servers und der Client-mal aus mit der Meldung
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
wieder zu verbinden versucht, auf der socket.connect();
Linie. Ich sehe die Nachricht preparing to connect
in Logcat bei der Überwachung des Clients und die Nachricht accepting
bei der Überwachung des Servers, aber es geht nie über diesen Punkt hinaus.
Könnten Sie "wenn die Verbindung getrennt und neu initialisiert wird" und bei welcher Aussage der Fehler (java.io.IOException: lesen fehlgeschlagen, Socket möglicherweise geschlossen oder Timeout, lesen ret: -1) geworfen werden? – solosodium
@solosodium aktualisiert es für Sie. – sjyn