У меня есть настольное приложение Java, действующее как «сервер», и приложение Android, которое должно действовать как «клиент».
«Клиент» должен отправить String и получить ответ String [] от «сервера». Единственный метод, с которым я столкнулся, - это использование сокетов, подобных этому
Socket socket = null;
try {
Log.d(log_tag, "creating socket");
socket = new Socket("192.168.1.123", 8090);
Log.d(log_tag, "creating out");
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
DataInputStream in = new DataInputStream(socket.getInputStream());
Log.d(log_tag, "out created. sending data");
out.writeUTF("sql");
Log.d(log_tag, "data sent");
Log.d(log_tag, "receiving data. loop");
while(in.available() == 0);
Log.d(log_tag, "received = " + in.readUTF());
out.close();
in.close();
socket.close();
Log.d(log_tag, "all closed");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.d(log_tag, "finished");
«Сервер» строится таким же образом, за исключением порядка операций (сначала чтение, затем запись ответа).
Проблема : приложение Android зависает на линии
while(in.available() == 0);
Итак, InputStream никогда не готовится, и я не могу получить ответ от сервера, но «сервер» сообщает, что данные были отправлены.
Можете ли вы указать мне на мою ошибку (я думаю, она очевидна, но я ее не вижу)?
Постскриптум Возможно, это неправильный путь, но здесь нельзя использовать какие-либо промежуточные слои. Я тоже не могу изменить код сервера.