java.net.SocketException:android模拟器中的协议不支持的地址族

Sri*_*thy 5 java eclipse proxy networking android

我试图运行简单的应用程序从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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在论坛中搜索后我尝试了以下选项,但它们似乎都没有工作:

  1. 在android启动选项中,我使用-http-proxy server:port -dns-server server

  2. 我在清单文件中包含了Internet权限

    uses-permission android:name ="android.permission.INTERNET"

    uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 设置系统属性以在有人建议后使用ipv4堆栈

            java.lang.System.setProperty("java.net.preferIPv4Stack", "true");
    java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");
    
    Run Code Online (Sandbox Code Playgroud)

我正在开发Android 2.2和windows vista,请你在这里帮助我...

小智 0

只是尝试做......

connection.setConnectTimeout(timeoutInMillisecs);
Run Code Online (Sandbox Code Playgroud)

可能是你没有设置它。