2013-06-21 47 views
0

我需要開發一種應用程序,將允許設備從時間傳送給時間(一個裝置發送一個簡單的消息,另一個發送響應)。BluetoothServerSocket:如何處理後續連接

這種通信是不會(在幾分鐘一次)經常發生,所以它似乎沒有要合理,以保持設備之間的永久連接。此外,由於某種原因連接可能會丟失,所以我需要某種恢復邏輯。

相反,我更喜歡的應用程序,以每次需要將數據發送到對等的時間建立新的連接。但是,規格說,在BluetoothServerSocket.accept返回後,應該關閉服務器套接字。這意味着該應用將不再能夠接收後續的傳入連接。

目前我在考慮不關閉服務器套接字,並以同步的方式處理傳入的連接,從而使應用程序不會嘗試接受新的連接,直到前一個處理和關閉。如果另一個對等方在這樣的處理過程中嘗試連接,會發生什麼?它會失敗還是阻塞,直到服務器準備好接受它?

回答

0

文檔說「BluetoothServerSocket可以(也應該)被丟棄,除非你想接受更多的連接。」既然你想接受更多的連接,那麼你應該保留它。

文件還包含以下內容有關的ServerSocket的accept方法。 接受是阻止呼叫。當連接被接受或發生異常時,它將返回。只有當遠程設備發送連接請求時,連接才被接受,且連接請求的UUID與註冊到此偵聽服務器套接字的UUID相匹配。成功後,accept()將返回已連接的BluetoothSocket。

+0

我測試了我最初的想法(永久的服務器套接字+同步處理)。它似乎在工作:傳入連接等待輪到他們接受。但是,有時客戶端套接字無法連接(超時?),並且其中一個設備在等待時甚至以某種方式解除綁定。 –

+0

看起來我必須爲每個對等設備創建一個單獨的服務器套接字。 –