Обмен данными между Android и ПК через Socket - PullRequest
1 голос
/ 12 января 2011

У меня есть настольное приложение 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 никогда не готовится, и я не могу получить ответ от сервера, но «сервер» сообщает, что данные были отправлены.
Можете ли вы указать мне на мою ошибку (я думаю, она очевидна, но я ее не вижу)?
Постскриптум Возможно, это неправильный путь, но здесь нельзя использовать какие-либо промежуточные слои. Я тоже не могу изменить код сервера.

1 Ответ

1 голос
/ 16 июня 2011

Вид некропоста:)

Проблема была в "серверном" коде.

В моем случае это была отправка пустой строки UTF, которую вообще нельзя получить (должен быть хотя бы один пробел для того, чтобы InputStream что-то перехватил)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...