我正在爲使用Bluecove API的計算機構建一個簡單的Java藍牙服務器。我正在構建一個Android客戶端應用程序,但問題似乎源於服務器端應用程序。保持Java藍牙連接活着
我確定有人已經發布了任何答案,我過去幾天嚴格地嘗試了不同的解決方案,並且看到了每個可能的論壇,但我似乎無法保持套接字線程上的連接活着。
從android到計算機建立連接後,我可以交換消息,反之亦然,在計算機之間交換字節後,Bluecove堆棧關閉並關閉套接字連接,即使我沒有明確地告訴它connection.close()。
我試圖用一段時間(某些語句爲true)循環來保持連接活着,並且它不再在接收到第一條消息後關閉套接字,但它不能接收我從我發送的任何後續消息智能手機到我的電腦。雖然它基本上處於活動狀態,但當我嘗試從智能手機發送它時,它不會收到任何新消息。不知道爲什麼。
對不起,這是我第一次發佈,我不確定爲什麼代碼的第一部分不能正確顯示在頁面上。
代碼進行連接:
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) {}
}
螺紋代號收聽傳入的數據
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){}
}
您不能從客戶端發送多個消息到服務器,但是您能否將多個消息從服務器發送到客戶端?哪個循環調用你的run()方法?你能提供這個代碼調用run()嗎? – 2015-01-11 10:21:45
在過去,我面臨着非常類似的問題。但在我的情況下,連接並未關閉,只有IO速度正在放慢(在Android端)。在調試之後,我們發現,經過一段時間的不活動之後,它會在特定超時後發生在Android端(Android切換到電源安全模式),並且此超時不能更改。爲了保持連接正常,我們只是定期發送空包(一個字節)。希望它會有所幫助。 – Eugene 2015-03-02 11:49:25
不要只使用空白的try/catch塊。在拋出異常時記錄它,它會幫助你獲得真正的理由。否則,你在猜測。 – Don 2015-03-12 03:57:00