2012-03-17 87 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

相关问题