Hallo Leute Ich habe jetzt ein Problem mit Bluenicecom 3. Ich möchte die Datei zwischen Bluenicecom und meinm Handy transportieren. Die Transportion zwischen PC und Bluenicecom funktioniert gut. Aber beim Handy geht es nicht. Ich habe mit j2me programmiert. Bluenicecom arbeitet im Slavemodul. Und dann habe ich ein Client im Handy herstellt. Der Client sucht nach Bluenicecom und verbindet mit ihm. Bis hier sind alles OK. Danach habe ich wieder zwei Threads geschrieben. Ein ist für inputstream und ander ist für outputstream. Also zuerst sendet das Handy einen Befehl nach Bluenicecom und dann sollt das Handy eine Nachricht vom Bluenicecom empfangen. Hier gibt es aber Problem, das Thread für inputstream funktioniert nicht. Ist dies Prinzip richtig? Kann jemand helfen? Vielen Dank im voraus!
Vielleicht solltest du mal ein bisschen Code posten. Das ganze sollte funktionieren, denn ich habe es beim dem BNC4 genauso gemacht. Ist das Modul auch wirklich mit dem Handy verbunden, das heißt die Connection in Java ist auch richtig offen (einfach mal auf dem Handy ein paar debug ausgaben einbauen). Bin die Woche über leider nicht zu Hause, deswegen habe ich auch keinen Code hier von mir. Gruß Micha
Hallo Micha Danke für die Antwort. Ich glaube, dass das Modul wirklich mit dem Handy verbunden ist. Weil das Handy hat schon gefragt ob die Verbindung mit dem Bluenicecom zuverlässig ist. Und ich habe auch schon mal probiert das Handy mit einem PC zu verbinden und es hat geklappt. Hier ist der Code für Kommunikation: //get URL from funktion servicesDiscovered ServiceRecord rec = serviceRecord[i]; String url = rec.getConnectionURL(ServiceRecord.NOAUTHENTICATE _NOENCRYPT, false); //bluetooth connect private void btConnect(final String url){ StreamConnection stream; try { stream = (StreamConnection) Connector.open(url); DataOutputStream out = stream.openOutputStream(); InputStream in = stream.openInputStream(); startWriteThread(out); startReadThread(in); } catch (IOException ex) { ex.printStackTrace(); } } ich glaube bis jetzt sind alles richtig. Wenn der Satz "stream =(StreamConection) Conector.open(url)" durchgeführt wird, fragt das Handy ob die Verbindung zuverlässig ist. Hier sind zwei Thread für Read und Write: StartWriteThread ist noch ok. Aber StartReadThread ist abstürzt bei dem Satz "in.read". private void startWriteThread(final OutputStream out) { Thread writer = new Thread() { public void run() { // semaphor available available = true; try { cl_frm.append("write start.\n"); String str = "h"; byte[] byte_arr = str.getBytes(); out.write(byte_arr); out.flush(); cl_frm.append("write finish\n"); available = false; } catch (Exception e) { Alert alert_btConnect_1 = new Alert("Problem","btConnect write stream error",null, AlertType.INFO); alert_btConnect_1.setTimeout(5000); cl_display.setCurrent(alert_btConnect_1); } finally { cl_frm.append("Bluetooth write stream closed."); try { out.close(); } catch (IOException e) { Alert alert_btConnect_2 = new Alert("Problem","btConnect write stream close error",null, AlertType.INFO); alert_btConnect_2.setTimeout(5000); cl_display.setCurrent(alert_btConnect_2); } } } }; writer.start(); } private void startReadThread(final InputStream in) { Thread reader = new Thread() { public void run() { while(available == true){} try { cl_frm.append("i do try\n"); byte[] byte_arr = null; int i; while(true){ cl_frm.append("i do the while\n"); !!!!!!!!// Das Problem ist hier!!!!!!! in.read() abstürzt. try{in.read();} catch (IOException ex) {cl_frm.append("can't read");break;} // int ia = in.read(); // geht auch nicht // cl_frm.append("get"+ia+" \n"); // if (ia == -1) { // cl_frm.append("Stop!!!"); //// break; // } } available = false; } catch (Throwable e) { Alert alert_btConnect_1 = new Alert("Problem","btConnect read stream error",null, AlertType.INFO); alert_btConnect_1.setTimeout(5000); cl_display.setCurrent(alert_btConnect_1); } finally { cl_frm.append("Bluetooth read stream closed."); try { in.close(); } catch (IOException ex) { ex.printStackTrace(); } Alert alert_btConnect_2 = new Alert("Problem","btConnect read stream close error",null, AlertType.INFO); alert_btConnect_2.setTimeout(5000); cl_display.setCurrent(alert_btConnect_2); } } }; reader.start(); } } Micha, weißt du vielleicht wo das Problem ist? Gruß und vielen Dank im voraus! Tim
Hi, also theoretisch sieht das schonmal gut aus. Ich schreibe mal aus dem Kopf wie ich das gemacht habe (bin am WE wieder @home und könnte dann direkt in den Code schauen). Also probiere es erstmal ganz einfach: 1. Du brauchst keine Service Record zum probieren nehmen. Nimm als URL einfach eine btspp url ... musste mal google, war irgendwie sowas wie btspp://23:23:43:43: usw .. wobei die zahlen vorne die Adresse des BT Moduls sind (wie die mac adresse bei einer Netzwerkarte) (die werte für noauthenticate usw kommen da auch noch mit dazu) Das schließt schonmal dort einen Fehler aus. 2. Ich habe immer eine Schleife drin DataOutputStream out; while(out == null) { out = stream.openOutputStream(); } In der eleganten Version läuft das über einen Thread, im Test steht solange "Bitte warten" auf dem Bildschirm bis die Verbindung steht. Die Meldung am Handy meint erstmal nur, ob das Handy eine Verbindung zum Modul aufbauen darf, sagt aber nichts darüber aus ob die Connection steht. Das ganze dann auch für den InputStream machen. Dann im MC einfach das eingelesen Byte gleich wieder zurückschicken, dort erstmal noch keine Prüfungen etc machen. Wenn der Loop dann funktioniert, dann stehen die alle weiteren Wege offen. Fazit aus meiner Erfahrung, erstmal alles ganz Simple machen (ohne Threads etc). Wenn du dann weißt das die Verbindung klappt kannste das immer noch schön ausbauen. Achso noch etwas: Du schreibst : >> Aber StartReadThread ist abstürzt bei dem >> Satz "in.read". Das deutet schonmal auf ein nicht offene Verbindung hin, in wird wohl noch null sein. Wenn noch etwas unklar fragen, Codebeispiele von mir wenn dann wie gesagt erst am WE. Gruß Micha
Hallo Micha Danke sehr für die Tipps. Ich probiere mal. Gruß Tim
Hallo Micha Es hat nicht geklappt. Kannst du mir zeigen wie du die Verbindung aufgebaut hast? Es wäre nett wenn du den Code mir schicken könntest. Meine email ist tim_de09@yahoo.de Vielen Dank! Gruß Tim
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.