我正在制作一个 android 应用程序,通过 ip 和端口检查与 PC 的连接。
我有一堂课,我通过了 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 连接并检查您是否可以打开。