2010-12-27 12 views
3

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.

Antwort

3

Wenn das Remote-Gerät außerhalb des zulässigen Bereichs ist, sollte der lokale Stack die Verbindung schließen, nachdem das Zeitlimit für die Verbindungsüberwachung abgelaufen ist. Abhängig von der JSR-82-Implementierung gibt receive.read(buffer) -1 zurück oder wirft eine IOException. Sie können dies simulieren, indem Sie das Remote-Gerät ausschalten oder außerhalb der Reichweite bewegen.

+0

Sehr geschätzt! –

+0

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.) –