Ich versuche eine Server-Client-Verbindung über die spp zu implementieren.Bluetooth in Java Mobile: Behandlung von Verbindungen außerhalb des Bereichs
Nach der Initialisierung des Servers, starte ich einen Thread, der zuerst auf Clients hört und dann Daten von ihnen empfängt. Es sieht so aus:
public final void run() {
while (alive) {
try {
/*
* Await client connection
*/
System.out.println("Awaiting client connection...");
client = server.acceptAndOpen();
/*
* Start receiving data
*/
int read;
byte[] buffer = new byte[128];
DataInputStream receive = client.openDataInputStream();
try {
while ((read = receive.read(buffer)) > 0) {
System.out.println("[Recieved]: "
+ new String(buffer, 0, read));
if (!alive) {
return;
}
}
} finally {
System.out.println("Closing connection...");
receive.close();
}
} catch (IOException e){
e.printStackTrace();
}
}
}
Es funktioniert gut, da ich Nachrichten empfangen kann. Was mich beunruhigt, ist, wie der Faden schließlich sterben würde, wenn ein Gerät außer Reichweite gerät?
Erstens, der Anruf an receive.read(buffer)
blockiert, so dass der Thread wartet, bis er irgendwelche Daten empfängt. Wenn das Gerät außer Reichweite gerät, würde es niemals fortfahren, um zu überprüfen, ob es in der Zwischenzeit unterbrochen wurde.
Zweitens würde es niemals die Verbindung schließen, d. H. Der Server würde das Gerät nicht akzeptieren, sobald es wieder in Reichweite ist.
Sehr geschätzt! –
Sie können das Telefon auch * außerhalb der Reichweite * lassen, indem Sie es in eine Kartoffelchip-Tasche stecken. (Oder irgendeine andere Tasche mit einer dünnen Metallschicht.) –