Android中的IP回退

Zac*_*ese 7 java ip android web-services apache-commons

我正在访问服务器以进行Web服务调用.当我在与服务器相同的网络上进行开发时,我可以通过其内部IP地址访问Web服务,但不能访问其外部IP地址.但是,如果我不在网络上,我只能通过其外部IP地址访问它.尝试其中一个IP地址然后再回到另一个IP地址的最佳方法是什么?

这是我的代码示例,仅用于访问其中一个或另一个:

protected String retrieve() {
    Log.v(TAG, "retrieving data from url: " + getURL());

    HttpPost request = new HttpPost(getURL());
    try {
        StringEntity body = new StringEntity(getBody());
        body.setContentType(APPLICATION_XML_CONTENT_TYPE);
        request.setEntity(body);            

        HttpConnectionParams.setConnectionTimeout(client.getParams(), CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(client.getParams(), SOCKET_TIMEOUT);

        HttpResponse response = client.execute(request);
        final int statusCode = response.getStatusLine().getStatusCode();


        if (statusCode != HttpStatus.SC_OK) {
            Log.e(TAG, "the URL " + getURL() + " returned the status code: " + statusCode + ".");
            return null;
        }

        HttpEntity getResponseEntity = response.getEntity();

        if (getResponseEntity != null) {
            return EntityUtils.toString(getResponseEntity);
        }
    } catch (IOException e) {
        Log.e(TAG, "error retrieving data.", e);
        request.abort();
    }

    return null;
}   

/*
 * @return the URL which should be called.
 */
protected String getURL() {
    return INTERNAL_SERVER_URL + WEB_APP_PATH;
}
Run Code Online (Sandbox Code Playgroud)

And*_*tov 4

查看您的 Android 设备的 IP 地址。您可以按照此处所述获取它。

然后你可以决定:

  • 如果您位于办公室的子网中(例如 192.168.0.0/16) - 使用内部地址
  • 如果您在其他子网中 - 使用外部地址