サーバー接続をテストするための次のコードがあります。
イーサネットとWi-Fi接続を備えたデバイスがあります。
ユーザーがネットワークをイーサネットからwifiまたはその逆に切り替えるとき、サーバー接続のテストを行い、サーバーが新しいネットワークで到達可能かどうかを確認します。
私は次のコードを持っています:
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ブラウザーを使用してMyServerにpingを実行できますが、アプリケーションからサーバーにpingを実行できません。
Wi-Fiとイーサネットで機能させるためにコードに何かを追加する必要がありますか?
私も試してみましたInetAddress.getByName("www.MyServer.com").isReachable(timeout)
が、同じ結果が得られました。
異なるプラットフォーム間で機能するAndroidでpingを実装する信頼できる方法はありますか?