2009-01-14 7 views
17

Kann mir jemand sagen, warum das im Android-Emulator nicht funktioniert? Vom Browser habe ich Zugriff und der Server ist intern. Ich kann nur daran denken, dass mir eine Konfiguration in meiner App fehlt, damit sie auf die Netzwerkebene zugreifen kann.Android HTTP-Verbindung

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

löst eine Unknown

Dank

Antwort

30

Soweit Konfiguration geht, ist die einzige Einstellung, die Sie sollen die INTERNET Erlaubnis zugreifen müssen, aktiviert, indem Sie den folgenden im Internet von Ihrem Antrag Linie außerhalb die Anwendung Tags innerhalb Ihrer Anwendung Manifest.

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

So würde das Manifest dieser allgemeinen Konstruktion folgen

<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

Das war es. Vielen Dank. – Eldelshell

+0

Ausgezeichnet! Ich liebe es, wenn es die einfachen Lösungen sind. –

+0

Wow! Dieses Ding hat 3k Ansichten erreicht ... das sollte dir viele SO Punkte geben Reto – Eldelshell

2

Es könnte immer noch nicht funktioniert, weil der Timeout. Da Sie root-Berechtigungen benötigen, um ein ICMP-Paket zu senden, und die Implementation von isReachable wird die langsame TCP-Version von ECHO verwenden. Chekcout der JavaDoc.