2010-12-27 6 views
3

sppでサーバーとクライアントの接続を実装しようとしています。Java MobileのBluetooth:範囲外の接続の処理

サーバを初期化した後、まずクライアントをリッスンしてからデータを受信するスレッドを開始します。それは次のようになります。

私はメッセージを受け取ることができてうまくいきます。何が問題になっているのは、デバイスが範囲外になったときにスレッドが最終的にどのように死ぬかということです。

最初に、receive.read(buffer)を呼び出すと、スレッドはデータを受信するまで待機します。デバイスが範囲外になると、中断されていないかどうかを確認するために、デバイスが先に進むことはありません。

第2に、接続を閉じることはありません。つまり、サーバーは範囲内に戻ってもデバイスを受け入れません。

答えて

3

リモートデバイスが圏外になると、リンクスーパーバイザタイムアウトが経過した後、ローカルスタックは接続を閉じる必要があります。 JSR-82の実装によっては、receive.read(buffer)は-1を返し、IOExceptionを返します。これをシミュレートするには、リモートデバイスをオフにするか、リモートデバイスを範囲外に移動します。

+0

非常に高く評価されました! –

+0

ポテトチップバッグに入れて電話*を実際に外に出すこともできます。 (または薄い金属層のある他の袋)。 –

関連する問題