2012-03-17 84 views
3

我有以下用於測試服務器連接的代碼。
我有一個具有以太網以及Wi-Fi連接的設備。代碼在兩種不同的網絡類型上的行爲不同

當用戶將網絡從以太網切換到wifi或vise verse時,我會測試服務器連接,並檢查我的服務器是否可與新網絡連接。

我有以下代碼:

public class TestActivity extends Activity 
{ 
    Button test_btn = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     test_btn = (Button)findViewById(R.id.testButton); 
     test_btn.setOnClickListener(new OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       Log.d("TestApp", "onClick Starting Test"); 
       startTest(); 
      } 
     }); 
    } 

    void startTest() 
    { 
     ServerTestThread mServerTestThread = new ServerTestThread() 
     mServerTestThread.start(); 
    } 

    class ServerTestThread extends Thread 
    { 
     boolean result = false; 
     public void run() 
     { 
      boolean result = false; 
      HttpGet request = new HttpGet("www.MyServer.com"); 
      HttpParams httpParameters = new BasicHttpParams(); 
      HttpClient httpClient = new DefaultHttpClient(httpParameters); 

      try 
      { 
       HttpConnectionParams.setConnectionTimeout(httpParameters, 6000); 
       HttpConnectionParams.setSoTimeout(httpParameters, 6000); 
       HttpResponse response = httpClient.execute(request); 

       int status = response.getStatusLine().getStatusCode(); 
       if (status == HttpStatus.SC_OK) 
       { 
        result = true; 
       } 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
       result = false; 
      } 

      Log.d("TestApp", "Ping Result:"+result); 
     } 
    } 

} 

當我使用以太網連接我的設備連接到互聯網,但是當我從以太網交換機,用於WI-FI這段代碼給了我假的結果此代碼的工作我的設備上細每次。

使用wi-fi我可以使用android瀏覽器ping到MyServer,但是從我的應用程序中我無法ping到我的服務器。

我是否需要在我的代碼中添加一些額外的東西以使其適用於WiFi和以太網?

我也試過與InetAddress.getByName("www.MyServer.com").isReachable(timeout)但它也給了我相同的結果。

是否有任何可靠的方式在Android中實現ping,它將跨越不同的平臺。

+0

嘗試以http://www.MyServer.com – 2012-03-17 09:33:31

+0

我已經嘗試過,但相同的行爲。 – User7723337 2012-03-17 09:35:29

+0

嘗試使用ConnectivityManager。 – Deucalion 2012-03-17 12:54:14

回答

1

抱歉,用這一個

class ServerTestThread extends Thread 
{ 
boolean result = false; 
public void run() 
{ 
    boolean result = false; 
    HttpGet request = new HttpGet("www.MyServer.com"); 
    HttpParams httpParameters = new BasicHttpParams(); 


    try 
    { 
     HttpConnectionParams.setConnectionTimeout(httpParameters, 6000); 
     HttpConnectionParams.setSoTimeout(httpParameters, 6000); 
     HttpClient httpClient = new DefaultHttpClient(httpParameters);///write this line below 
     HttpResponse response = httpClient.execute(request); 

     int status = response.getStatusLine().getStatusCode(); 
     if (status == HttpStatus.SC_OK) 
     { 
      result = true; 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     result = false; 
    } 

    Log.d("TestApp", "Ping Result:"+result); 
} 

}

+0

我試了一下,但我得到的是同樣的行爲,請你解釋一下原因,以及如何使用上面提供的解決方案。 – User7723337 2012-03-19 08:20:51

相關問題