Я пытаюсь реализовать соединение сервер-клиент по 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)
блоков, так что поток ожидает, пока не получит какие-либо данные.Если устройство выходит за пределы диапазона, оно никогда не будет продолжать проверять, не прервано ли оно между тем.
Во-вторых, оно никогда не закроет соединение, т. Е. Сервер не примет устройство, когда оно вернется обратно.диапазон.