android - 代码在两种不同的网络类型上表现不同

标签 android android-wifi android-networking

我有以下用于测试服务器连接的代码。
我有一个具有以太网和 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,它可以跨不同的平台工作。

最佳答案

抱歉用这个

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

关于android - 代码在两种不同的网络类型上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9748829/

相关文章:

android - 禁用所有 View 的触摸事件

android - 在 Android 中发送电子邮件仅选择电子邮件应用程序并指定附件 mime 类型

java - 在匿名方法中访问 'this'

Android Handlers - 线程间通信

android - 我们可以使用Android设备的硬编码密码选择特定的wifi吗

android - 在 Android 中发布 JSON 并检索响应

android - 如何检测android中的主机可达性?

android - 在 Android 中将音乐或声音从手机流式传输到手机

android - 当我的应用程序处于后台时,如何检测网络状态/wifi 状态已更改?

android - 连接在请求完成之前关闭 - Android ION