2009-01-14 38 views
17

Ai có thể cho tôi biết lý do tại sao tính năng này không hoạt động trong trình giả lập Android? Từ trình duyệt tôi có quyền truy cập và máy chủ là nội bộ. Tất cả những gì tôi có thể nghĩ là tôi thiếu một số cấu hình trên ứng dụng của mình để nó có thể truy cập vào lớp mạng.Kết nối HTTP Android

try { 
    InetAddress server = Inet4Address.getByName("thehost"); 
    //Doesn't work either 
    //or InetAddress server2 = Inet4Address.getByAddress(new String("192.168.1.30").getBytes()); 

    if(server.isReachable(5000)){ 
     Log.d(TAG, "Ping!"); 
    } 

    Socket clientsocket = new Socket(server, 8080); 
} catch (UnknownHostException e) { 
    Log.e(TAG, "Server Not Found"); 
} catch (IOException e) { 
    Log.e(TAG, "Couldn't open socket"); 
} 

Ném một UnknownHostException

Cảm ơn

Trả lời

30

Theo như cấu hình đi, chỉ cài đặt bạn nên cần phải truy cập Internet từ ứng dụng của bạn được sự cho phép INTERNET, kích hoạt bằng cách thêm những điều sau đây dòng bên ngoài Thẻ ứng dụng trong Tệp kê khai ứng dụng của bạn.

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

Vì vậy manifest sẽ đi theo xây dựng này nói chung

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.apis">  
    <uses-permission android:name="android.permission.INTERNET" /> 
    <application 
    android:name="MyApplication"  
    android:label="@string/application_title" 
    android:icon="@drawable/my_icon"> 
    [ .. Your Activities go here ] 
    </application> 
</manifest> 
+1

Đó là nó. Cảm ơn nhiều. – Eldelshell

+0

Tuyệt vời! Tôi thích nó khi nó là giải pháp dễ dàng. –

+0

Wow! Điều này đã đạt đến 3k lượt xem ... mà sẽ cung cấp cho bạn rất nhiều điểm SO Reto – Eldelshell

2

Nó có thể vẫn không hiệu quả, vì thời gian chờ. Vì bạn cần quyền root để gửi một gói ICMP và việc triển khai thực hiện isReachable sẽ sử dụng phiên bản TCP chậm của ECHO. Chekcout javaDoc.

Các vấn đề liên quan