Java-Bluetooth-Verbindung am Leben erhalten

8

Ich baue einen einfachen Java Bluetooth Server für meinen Computer mit der Bluecove API. Ich baue auch eine Android-Client-Seite-App, aber das Problem scheint von der Server-Seite app stammen.

Ich bin mir sicher, dass jemand schon irgendwo eine Antwort gepostet hat und ich habe in den vergangenen Tagen verschiedene Lösungen rigoros ausprobiert und jedes mögliche Forum angeschaut, aber ich kann die Verbindung auf dem Socket-Thread nicht lebendig halten.

Ich kann eine Nachricht austauschen, nachdem eine Verbindung von Android zu Computer und umgekehrt von Computer zu Android hergestellt wurde, aber unmittelbar nachdem die Bytes ausgetauscht wurden, fährt der BlueCove-Stapel herunter und schließt die Socket-Verbindung, auch wenn ich das nicht explizit mache Sag es zu connection.close ().

Ich habe versucht, eine while-Schleife (einige Aussage ist wahr) zu verwenden, um die Verbindung aufrecht zu erhalten und den Socket nach Erhalt der ersten Nachricht nicht mehr abzuschalten, aber keine weiteren Nachrichten, die ich von meinem Smartphone aus sende zu meinem Computer entweder. Während es im Wesentlichen am Leben ist, kann es keine neuen Nachrichten empfangen, wenn ich versuche, sie vom Smartphone zu senden. Nicht sicher warum.

Es tut mir leid, das ist meine erste Veröffentlichung, und ich bin nicht sicher, warum der erste Teil des Codes auf der Seite nicht richtig angezeigt wird.

Code, der die Verbindung herstellt:

%Vor%

GEWINDECODE ZUM ANHÖREN VON EINGEHENDEN DATEN

%Vor%     
Kevin Lam 11.02.2013, 20:02
quelle

1 Antwort

0

Leider kann ich Ihren Code auf meinem Rechner nicht wirklich ausprobieren, aber ich glaube, ich habe Ihren Fehler gesehen: in Ihrer run () - Methode lesen Sie aus dem Eingabestream, drucken sie auf die Konsole und dann ist es vorbei. Nach deiner letzten Zeile

%Vor%

Ihre run () - Methode ist beendet und der Thread wird von der Laufzeitumgebung verworfen. Sie müssten das Empfangen in einer Weile (wahr) oder während (läuft) Schleife legen.

Ich habe deinen Code geändert und hier ist es, aber bedenke bitte, was ich vorher gesagt habe: Ich konnte es nicht testen, also kommt es völlig ungeprüft!

%Vor%

Hier ein paar allgemeine Punkte und Gedanken über meinen und deinen Code:

  • Wie Sie sehen, akzeptiere ich im Haupt-Thread nur eine neue Verbindung. Sobald ein Client verbunden ist, gebe ich das Verbindungsobjekt dem Thread. Es beginnt dann mit dem Client zu kommunizieren
  • In Java setzen wir normalerweise öffnende Klammern in dieselbe Zeile wie die Anweisung, die danach fragt, aber das ist nur ein Detail und kein Muss.
  • ALLWAYS machen etwas mit Ausnahmen oder fangen sie nicht ein. Das Minimum ist also ein printStacktrace () oder um Ihre Methode mit "throws xException" zu deklarieren, aber nicht fangen und ignorieren.

Wenn Sie das nächste Mal etwas hier posten, empfehle ich Ihnen, alle Ihre Import-Statements usw. einzuschließen. Das kann den Leuten helfen, die versuchen, Ihnen zu helfen. (Manchmal kann ein Import die Ursache aller Probleme sein, zum Beispiel wenn jemand java.awt.List anstelle von java.util.List importiert hat)

Ich hoffe, dass ich dir geholfen habe!

    
Christian 17.03.2015 21:23
quelle