Sto costruendo un semplice server Bluetooth Java per il mio computer utilizzando l'API Bluecove. Sto creando anche un'app client lato Android, ma il problema sembra derivare dall'app lato server.Mantenere attiva la connessione Bluetooth Java
Sono sicuro che qualcuno ha già inviato una risposta da qualche parte e ho provato diverse soluzioni rigorosamente negli ultimi giorni e ho esaminato tutti i possibili forum, ma non riesco a mantenere viva la connessione sul thread del socket.
Posso scambiare un messaggio attraverso dopo aver stabilito una connessione da Android a computer e viceversa da computer ad Android ma immediatamente dopo lo scambio dei byte, lo stack Bluecove si spegne e chiude la connessione socket anche quando non lo faccio ditelo esplicitamente a connection.close().
Ho provato a utilizzare un ciclo while (alcune istruzioni è vero) per mantenere attiva la connessione e non spegne più il socket dopo aver ricevuto il primo messaggio ma non può ricevere alcun messaggio successivo che invio dal mio smartphone al mio computer. Mentre è essenzialmente vivo, non può ricevere nuovi messaggi quando provo a inviarli dallo smartphone. Non so perché.
Mi dispiace, questa è la mia prima pubblicazione e non sono sicuro del motivo per cui la prima parte del codice non viene visualizzata correttamente nella pagina.
Codice di effettuare il collegamento:
public BluetoothServer()
{
try
{
service = (StreamConnectionNotifier)
Connector.open("btspp://localhost:" + new UUID(0x1101).toString() +
";name=SampleServer");
System.out.println("open connection");
while(runState == true){
connection = (StreamConnection) service.acceptAndOpen();
//send a greeting across to android
outputStream = connection.openOutputStream();
String greeting = "JSR-82 RFCOMM server says hello";
outputStream.write(greeting.getBytes());
//run thread that listens for incoming bytes through socket connection
Thread t = new Thread(new ConnectedThread(connection));
t.start();
}
} catch(IOException e) {}
}
CODICE FILETTO per l'ascolto di INCOMING DATI
public void run()
{
try
{
//open input stream to listen to data
inputStream = connection.openInputStream();
byte buffer[] = new byte[1024];
int bytes_read = inputStream.read(buffer);
String received = new String(buffer, 0, bytes_read);
System.out.println("received: " + received);
}
catch(IOException e){}
}
Non è possibile inviare più di un messaggio dal client al server, ma è possibile inviare più messaggi dal server al client? Quale loop chiama il tuo metodo run()? Potete fornire anche questo codice che chiama run()? –
In passato ho un problema molto simile. Ma nel mio caso, la connessione non è stata chiusa, solo la velocità dell'IO stava rallentando (sul lato Android). Dopo il debug, abbiamo scoperto, dopo un certo periodo di inattività, che si verifica sul lato Android dopo un timeout specifico (Android attiva la modalità di sicurezza dell'alimentazione) e questo timeout non può essere modificato. Per mantenere attiva la connessione, abbiamo inviato periodicamente pacchetti vuoti (un byte). Spero che ti sarà d'aiuto. – Eugene
Non utilizzare solo blocchi try/catch vuoti. Registra l'eccezione quando viene lanciata, ti aiuterà a ottenere una vera ragione. Altrimenti stai indovinando. – Don