sppを介してサーバークライアント接続を実装しようとしています。
サーバーを初期化した後、最初にクライアントをリッスンし、次にクライアントからデータを受信するスレッドを開始します。それはそのように見えます:
public final void run() {
while (alive) {
try {
/*
* Await client connection
*/
System.out.println("Awaiting client connection...");
client = server.acceptAndOpen();
/*
* Start receiving data
*/
int read;
byte[] buffer = new byte[128];
DataInputStream receive = client.openDataInputStream();
try {
while ((read = receive.read(buffer)) > 0) {
System.out.println("[Recieved]: "
+ new String(buffer, 0, read));
if (!alive) {
return;
}
}
} finally {
System.out.println("Closing connection...");
receive.close();
}
} catch (IOException e){
e.printStackTrace();
}
}
}
メッセージを受信できるので問題なく動作しています。私を悩ませているのは、デバイスが範囲外になったときにスレッドが最終的にどのように死ぬのかということです。
まず、receive.read(buffer)
スレッドがデータを受信するまで待機するように、ブロックを呼び出します。デバイスが範囲外になった場合、その間に中断されたかどうかを確認するために先に進むことはありません。
次に、接続が閉じられることはありません。つまり、サーバーが範囲内に戻ると、サーバーはデバイスを受け入れません。