2013-07-11 85 views
0

我想開發一個應用程序,使兩個Android手機能夠通過Wifi網絡交換數據。由於即時沒有兩個電話,我想我可以嘗試使用1個應用程序作爲服務器和另一個應用程序連接到172.0.0.1作爲客戶端。 在服務器應用程序中,我啓動運行NanoHTTPD服務器的服務。作爲一個測試,我想收到「Hallo Client」,當我要求http://172.0.0.1:8080/hallo/。這適用於正常的Android瀏覽器。從Android設備上的應用程序連接到172.0.0.1由於超時而失敗

這是服務器的樣子:

private String NetworkResponse; 
    private Runnable Erg = new Runnable() 
    { 

     @Override 
     public void run() 
     { 
      // TODO Auto-generated method stub 
      TV1.setText(NetworkResponse); 
      Log.d("bla", NetworkResponse); 
     } 
    }; 

    public void Request(View view) 
    { 

     mHandler = new Handler(); 
     Thread T = new Thread(new Runnable() 
     { 

      @Override 
      public void run() 
      { 


       HttpURLConnection urlConnection = null; 
       try 
       { 
        URL url = new URL("http://172.0.0.1:8080/hallo/"); 
        urlConnection = (HttpURLConnection) url.openConnection(); 
        urlConnection.setReadTimeout(10000); 
        urlConnection.setConnectTimeout(10000); 
        BufferedInputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
        NetworkResponse = readIt(in,1000); 
        mHandler.post(Erg); 
       } 
       catch (MalformedURLException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       catch (IOException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       finally 
       { 
        urlConnection.disconnect(); 
       } 

      } 
     }); 
     T.start(); 
    } 

    private String readIt(BufferedInputStream stream, int len) throws IOException, UnsupportedEncodingException 
    { 
     Reader reader = null; 
     reader = new InputStreamReader(stream, "UTF-8"); 
     char[] buffer = new char[len]; 
     reader.read(buffer); 
     return new String(buffer); 
    } 
} 

此代碼工作時的網址:

@Override 
public Response serve(String uri, String method, Properties header, Properties parms, Properties files) 
    { 
     Log.d("HServer", "httpd request >>" + method + " '" + uri + "' " + " " + parms); 

     if (uri.startsWith("/hallo/")) 
     { 
      return new Response(HTTP_OK, MIME_PLAINTEXT, "Hallo Client"); 
     } 
     else 
     { 
      return new Response(HTTP_OK, MIME_PLAINTEXT, ""); 
     } 
    } 

然後我用一個簡單的測試與谷歌例後HttpURLConnection類製成的第二應用就像http://en.wikipedia.org,但不是http://172.0.0.1:8080/hallo/。我得到

07-12 01:20:00.398: W/System.err(17234): java.net.SocketTimeoutException: failed to connect to /172.0.0.1 (port 8080) after 10000ms. 

所以我的問題是:爲什麼在Android瀏覽器從我的簡單的服務器收到的答案和我自己的應用程序不會?使用HttpURLConnection的方式有問題嗎? (P.S:我不使用模擬器,每個都在一個真實的手機上,這兩個應用程序都擁有所有權限)

回答

0

您可能想嘗試127.0.0.1而不是172.0.0.1。

+0

omg它工作。對於愚蠢的問題。有時我無法看到明顯的錯誤 – user2574572

+0

很高興它的工作。有時候,「明顯」的錯誤是最難看到的。請點擊並接受這個答案,如果它有幫助。 – gtrig

相關問題