java.net.SocketException: семейство адресов не поддерживается протоколом в эмуляторе Android - PullRequest
5 голосов
/ 11 января 2012

Я пытаюсь запустить простое приложение для доступа в Интернет с эмулятора Android, и вот мой код. Я за прокси и настроил настройки прокси в эмуляторе "... Беспроводные сети -> APN -> ...". Но интернет работает из браузера, а не из приложения.

            HttpURLConnection connection = null;
    String URLName = "http://www.google.com";

    try {
        URL u = new URL(URLName);
        connection = (HttpURLConnection) u.openConnection();
        connection.setRequestMethod("HEAD");
        int code = connection.getResponseCode();
        Log.d(TAG1, " " + code);
        // You can determine on HTTP return code received. 200 is success.
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.d(TAG1, e.toString());
    }

    finally {
        if (connection != null) {
            connection.disconnect();
        }
    }

Часть журнала ошибок в Logcat выглядит следующим образом:

01-11 01:01:26.308: DEBUG/SntpClient(72): request time failed: java.net.SocketException: Address family not supported by protocol

01-11 01:02:39.909: WARN/System.err(422): java.net.SocketException: The operation timed out

Я пробовал следующие варианты после поиска по форуму, но ни один из них не работает:

  1. В опциях запуска Android я использовал -http-прокси-сервер: порт -dns-server server

  2. Я включил интернет-разрешения в файл манифеста

    использует разрешение android: name = "android.permission.INTERNET"

    uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 
    
  3. Установите системные свойства для использования стека ipv4 после того, как кто-то предложил

            java.lang.System.setProperty("java.net.preferIPv4Stack", "true");
    java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");
    

Я работаю на Android 2.2 и Windows Vista, не могли бы вы помочь мне здесь ...

Ответы [ 4 ]

0 голосов
/ 20 июля 2012

Пожалуйста, попробуйте это:

HttpURLConnection con =null;

URL url = new URL("abcdefg");

Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress(android.net.Proxy.getDefaultHost(),android.net.Proxy.getDefaultPort()));

con = (HttpURLConnection) url.openConnection(proxy);
0 голосов
/ 11 января 2012

Попробуйте добавить это и в свой AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Вам также нужно поймать это исключение:

 catch(SocketException ex)
       {
         Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
           ex.printStackTrace();
       }
0 голосов
/ 11 января 2012

Попробуйте установить свой прокси и порт программно в Oncreate (), как это

      System.setProperty("http.proxyHost","IPaddress of ur machine");
      System.setProperty("http.proxyPort","port no");
0 голосов
/ 11 января 2012

Просто попробуйте сделать .....

connection.setConnectTimeout(timeoutInMillisecs);

Возможно, вы не устанавливаете его.

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