2012-01-11 36 views
5

Tôi đang cố chạy ứng dụng đơn giản để truy cập internet từ trình giả lập Android và đây là mã của tôi. Tôi đứng sau proxy và cấu hình cài đặt proxy trong trình mô phỏng bằng "... Mạng không dây -> APN -> ...". Nhưng internet đang làm việc từ trình duyệt chứ không phải từ ứng dụng.java.net.SocketException: Địa chỉ gia đình không được hỗ trợ bởi giao thức trong trình giả lập android

  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(); 
     } 
    } 

Phần log lỗi trong Logcat là như sau:

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 

Tôi đã thử các tùy chọn sau đây sau khi tìm kiếm trong diễn đàn nhưng không ai trong số họ dường như làm việc:

  1. Trong android tùy chọn khởi chạy Tôi đã sử dụng máy chủ proxy-http: máy chủ cổng -dns-server

  2. Tôi hav e bao gồm điều khoản internet trong file manifest

    sử dụng-phép android: name = "android.permission.INTERNET"

    uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 
    
  3. Đặt các thuộc tính hệ thống để sử dụng stack ipv4 sau khi ai đó đề nghị

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

Tôi đang làm việc trên Android 2.2 và windows vista, bạn có thể vui lòng giúp tôi tại đây ...

+0

Trình duyệt có hoạt động tốt trong Trình giả lập không? –

+0

@LalitPoptani có trình duyệt hoạt động tốt trong trình mô phỏng –

Trả lời

0

Chỉ cần cố gắng làm .....

connection.setConnectTimeout(timeoutInMillisecs); 

Có thể bạn không thiết lập.

+0

Tôi đã thử cách này nhưng vẫn không sử dụng. –

+0

Tốt, hãy thử sử dụng ---------- HttpConnectionParams.setConnectionTimeout (client.getParams(), CONNECTION_TIMEOUT); \t \t \t HttpConnectionParams.setSoTimeout (client.getParams(), SOCKET_TIMEOUT); –

0

Hãy thử này thêm vào AndroidManifest.xml của bạn cũng như:

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

Bạn cũng cần phải bắt ngoại lệ này:

catch(SocketException ex) 
     { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage()); 
      ex.printStackTrace(); 
     } 
+0

Sau khi thử cái này, nó làm việc cho các địa chỉ cục bộ (sau proxy). Tuy nhiên, các địa chỉ bên ngoài không hoạt động .. –

+6

Bị đánh cắp từ http://stackoverflow.com/questions/7854300/java-net-socketexception-address-family-not-supported-by-protocol – Will

0

Cố gắng thiết lập proxy và cổng của bạn lập trình trong onCreate() như này

 System.setProperty("http.proxyHost","IPaddress of ur machine"); 
     System.setProperty("http.proxyPort","port no"); 
0

Hãy thử cách này:

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); 
Các vấn đề liên quan