2016-02-21 79 views
-2

在我的应用我的AsyncTask类,连接到本地/远程服务器,以获得一些数据,我想检查服务器连接的AsyncTask运行之前, 我有这样的功能:如何检查服务器连接是否存在?

public static boolean checkServerAvailable(String hostURL) { 
    HttpURLConnection connection = null; 
    try { 
     URL u = new URL(hostURL); 
     connection = (HttpURLConnection) u.openConnection(); 
     connection.setConnectTimeout(5000); 
     connection.setRequestMethod("HEAD"); 
     int code = connection.getResponseCode(); 
     System.out.println("" + code); 
     return true; 
     // You can determine on HTTP return code received. 200 is success. 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return false; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return false; 
    } finally { 
     if (connection != null) { 
      connection.disconnect(); 
     } 
    } 
} 

此功能使用超时连接到服务器,如果超时过期,则意味着没有服务器。问题是我运行这个代码,即使服务器存在,它也会返回“没有服务器”。

我试过设置一个5000ms大的超时时间,但它很长时间会暂停UI,有时甚至在服务器存在时仍然会返回“没有服务器”。

我该怎么办? 谢谢!

+0

可能是您的互联网连接有问题。 – AKSiddique

+0

这三个catch块中的哪一个会进入,并抛出什么异常? – EJP

+2

'它正在返回“没有服务器”。不可能。该函数返回true或false。 – greenapps

回答

-1

尝试使用此插座示例代码

Socket socket; 
    final String host = "your.server.IP.or.host"; 
    final int port = 80; 
    final int timeout = 5000; // 5 seconds or what ever time you want 

    try { 
     socket = new Socket(); 
     socket.connect(new InetSocketAddress(host, port), timeout); 
    } 
    catch (UnknownHostException uhe) { 
     Log.e("ServerSock", "I couldn't resolve the host you've provided!"); 
    } 
    catch (SocketTimeoutException ste) { 
     Log.e("ServerSock", "After a reasonable amount of time, I'm not able to connect, Server is probably down!"); 
    } 
    catch (IOException ioe) { 
     Log.e("ServerSock", "Hmmm... Sudden disconnection, probably you should start again!"); 
    } 
+0

50秒是很多时间,我说它锁定UI的时间很长,因为我需要等待这个函数的答案,难道你没有另一个idia?谢谢! – user5912232

+0

你可以减少它到5秒它由你决定,我会编辑它 –

+0

所以解决方案是使用套接字?远程或本地服务器之间的端口变化如何? – user5912232

0

检查的AsyncTask之前的服务器连接运行

然后你要做的是,在其他的AsyncTask。

所以这一切都没有多大意义。您是不是使用StrictMode是吗?

+0

它是什么StrictMode? – user5912232

+0

请对所需的额外AsyncTask做出反应。 – greenapps

+0

你想让我将asyncTask添加到问题中吗? – user5912232

相关问题