У меня есть следующий код для проверки подключения к серверу.
У меня есть устройство, которое имеет 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, который будет работать на разных платформах.