У меня есть пара сервер-клиент, и я хочу создать прослушиватель на стороне клиента для новых ответов сервера. Я не уверен, как это сделать, сейчас я могу взаимодействовать только синхронно.
Вот сервер:
public class TestServer {
public static void main(String[] args) throws Exception {
TestServer myServer = new TestServer();
myServer.run();
}
private void run() throws Exception {
ServerSocket mySS = new ServerSocket(4443);
while(true) {
Socket SS_accept = mySS.accept();
BufferedReader myBR = new BufferedReader(new InputStreamReader(SS_accept.getInputStream()));
String temp = myBR.readLine();
System.out.println(temp);
if (temp!=null) {
PrintStream serverPS = new PrintStream(SS_accept.getOutputStream());
serverPS.println("Response received: " + temp);
}
}
}
}
Как видите, он отправляет ответ, когда получает его. Однако в целом я не буду уверен, когда другие серверы, которые я использую, отправляют ответы, поэтому я хотел бы создать асинхронный слушатель (или, по крайней мере, опрашивать сервер на предмет ответа каждые полсекунды или около того).
Вот что я пытаюсь на стороне клиента:
protected static String getServerResponse() throws IOException {
String temp;
try {
BufferedReader clientBR = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
temp = clientBR.readLine();
} catch (Exception e) {
temp = e.toString();
}
return temp;
}
И просто для справки, да, отправка данных с клиента на сервер работает нормально (это данные System.out правильно). Однако, когда я вызываю вышеупомянутую функцию, чтобы попытаться получить ответ сервера, он просто вешает мое приложение, которое является приложением Android в случае, если это уместно.
Что я хочу от функции, так это просто спросить у сервера, есть ли у меня данные для меня, и получить их, а если нет, то не ломать мое чертово приложение.