【问题标题】:How to check if server connection exists?如何检查服务器连接是否存在?
【发布时间】:2016-02-21 11:07:10
【问题描述】:

在我的应用程序中,我有 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();
        }
    }
}

该函数使用超时连接服务器,如果超时则表示没有服务器。问题是我正在运行这段代码,即使服务器存在,它也会返回“没有服务器”。

我尝试设置一个较大的超时时间,例如 5000 毫秒,但它会暂停 UI 很长时间,有时即使服务器存在,仍会返回“没有服务器”。

我能做什么? 谢谢!

【问题讨论】:

  • 可能是您的网络连接有问题。
  • it's returning "there is no server" 。不可能的。该函数返回真或假。
  • 在本地服务器上?在你的电脑上?应用程序无法在电脑上运行。仅在 Android 设备或 Android 模拟器程序中。模拟器在电脑上运行。
  • 此答案无助于解决您的问题。请多说一点。如果您需要帮助,请回答所有问题和评论。
  • 你还说应用在本地服务器上运行。那么你的手机是本地服务器吗?

标签: java android android-asynctask server


【解决方案1】:

在 asyncTask 运行之前检查服务器连接

然后你必须在另一个 AsyncTask 中这样做。

所以这一切都没有意义。

你没有使用StrictMode是吗?

【讨论】:

  • 什么是 StrictMode ?
  • 请对所需的额外 AsyncTask 做出反应。
  • 当然是检查服务器连接。那是你的问题不是吗?
  • 你应该先回答我的问题。就这样。重复:您是在 AsyncTask 的 doInBackground 中调用或执行 checkServerAvailable(String hostURL) 吗?
  • 那么你为什么不马上说你已经在异步任务中拥有它?会为我节省很多时间。
【解决方案2】:

在这里尝试使用套接字是示例代码

    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!");
    } 

【讨论】:

  • 50秒是很长的时间,我说它会锁定UI很长时间,因为我需要等待这个函数的答案,你没有另一个idia吗?谢谢!
  • 你可以将它减少到 5 秒,由你决定,我会编辑它
  • 所以解决办法是使用socket?远程或本地服务器之间的端口是什么变化?
  • 这个方法只是为了检查服务器是否打开,根据你的要求,如果你想ping本地服务器检查你连接到它的端口
  • 上述代码中的IOException 并不表示“突然断开连接”。没有要断开的连接。
猜你喜欢
  • 2014-07-11
  • 2015-04-23
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 2022-01-12
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多