Код ведет себя по-разному в двух разных типах сети - PullRequest
3 голосов
/ 17 марта 2012

У меня есть следующий код для проверки подключения к серверу.
У меня есть устройство, которое имеет Ethernet и Wi-Fi соединение.

Когда пользователь переключает сеть с Ethernet на 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);
        }
    }

}

Этот код прекрасно работает на моем устройстве, когда я подключаю свое устройство к Интернету через Ethernet-соединение, но когда я переключаюсь с Ethernet на WI-FI, этот код каждый раз дает мне ложный результат.

Используя Wi-Fi, я могу пинговать MyServer с помощью браузера Android, но из моего приложения я не могу пинговать с моего сервера.

Нужно ли добавить что-то еще в мой код, чтобы он работал для Wi-Fi и Ethernet?

Я тоже пытался с InetAddress.getByName("www.MyServer.com").isReachable(timeout), но это также дало мне те же результаты.

Существует ли надежный способ реализации ping в Android, который будет работать на разных платформах.

1 Ответ

1 голос
/ 18 марта 2012

извините, используйте этот

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

}

...