IPとポートを介してPCへの接続をチェックするAndroidアプリを作成しています。
IPとポートを渡すクラスがあります。次に、接続性が問題ない場合にブール値を返すメソッドがあります。
問題はwifiが正しく動作することですが、3gではメソッドは常にtrueを返します
このような方法:
public boolean PingWithPort(){
int[] AResult = new int[2];
int countResOk = 0;
boolean result = false;
if(!hostName.equals("")){
for(int positionResult = 0; positionResult < 1; positionResult ++){
try {
try{
Socket echoSocket = null;
echoSocket = new Socket(hostName, puerto);
echoSocket.setSoTimeout(1000);
if(echoSocket.isConnected()){
AResult[positionResult] = 1;
}else{
AResult[positionResult] = 0;
}
echoSocket.close();
}catch(IOException e){
AResult[positionResult] = 0;
}catch(Exception e){
AResult[positionResult] = 0;
}
} catch (Exception e) {
AResult[positionResult] = 0;
e.printStackTrace();
}
}
for(int controlResult = 0; controlResult < AResult.length-1; controlResult++){
if(AResult[controlResult] == 1){
countResOk++;
}
}
if(countResOk >= 1){
result = true;
}else{
result = false;
}
}else{
result = false;
}
return result;
}
では、どうすればこの問題を解決できるでしょうか。
どうもありがとうございました。解決策を探すのに何日もかかります。
私が見つけた解決策はこれです:
public boolean PingWithPort(){
int[] AResult = new int[2];
int countResOk = 0;
boolean result = false;
if(!hostName.equals("")){
for(int positionResult = 0; positionResult < 1; positionResult ++){
try {
try{
URL url = new URL("http://"+hostName+":"+puerto);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(3000);
urlc.setReadTimeout(3000);
urlc.connect();
if (urlc.getResponseCode() >= -1) {
AResult[positionResult] = 1;
}else{
AResult[positionResult] = 0;
}
}catch(Exception e){
AResult[positionResult] = 0;
}
} catch (Exception e) {
AResult[positionResult] = 0;
e.printStackTrace();
}
}
HTTP 接続を開き、開くことができることを確認します。