Проблема с URLConnection.getOutputStream () в Android - PullRequest
2 голосов
/ 27 июня 2011

Я написал простой HTTPS-клиент на Java для размещения некоторых данных на сервере.На сервере имеется действительный сертификат, подписанный доверенным центром сертификации, поэтому мне не пришлось связываться с хранилищами ключей или самозаверяющими сертификатами.Вот код:

try
{
    String data = "This is a test";

    SSLSocketFactory sslFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

    URL url = new URL("https://my.server.name");

    HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
    conn.setSSLSocketFactory(sslFactory);
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);

    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

    wr.write(data);
    wr.flush();
    wr.close();

    InputStream ins = conn.getInputStream();
    InputStreamReader isr = new InputStreamReader(ins);
    BufferedReader in = new BufferedReader(isr);

    String inputLine;
    String result;

    while( (inputLine = in.readLine()) != null )
        result += inputLine;

    in.close();
}
catch( Exception e )
{
    e.printStackTrace();
}

Этот код отлично работает при запуске как часть Java-программы командной строки, но он не работает корректно на Android (по крайней мере, не в эмуляторе).Я проследил проблему до этой строки:

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

Кажется, что вызов conn.getOutputStream() зависает до истечения времени ожидания соединения на сервере.Это не исключение.Он просто ждет бесконечно, пока не истечет время ожидания соединения на сервере, а затем переходит к wr.write(data), но, конечно, это не удается, потому что соединение теперь закрыто.

Кто-нибудь знает, в чем может быть проблема?Я искал проблемы с getOutputStream() на Android, но ничего полезного пока не нашел.

Спасибо!

1 Ответ

0 голосов
/ 05 августа 2013

Похоже, это проблема эмулятора Android. Я установил приложение на свой Motorola Droid, и все работает отлично. На самом деле это не ответ на первоначальную проблему, но проблема сейчас не имеет значения (по крайней мере, для меня), поскольку я могу протестировать приложение на своем телефоне.

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