【问题标题】:HttpURLConnection unable to resolve host when using host name使用主机名时 HttpURLConnection 无法解析主机
【发布时间】:2015-10-16 12:56:44
【问题描述】:

我已经检查了大多数关于同一问题的主题,但我找不到解决方案。

我的Android 应用程序使用HttpURLConnection 连接到WCF 服务,当我使用托管该服务的机器的IP 地址时它工作正常。但是,当我用主机名替换它时,它无法连接。我的连接方式很标准:

public static String getData(RequestPackage requestPackage) {
        BufferedReader reader = null;
        HttpURLConnection con = null;
        String uri = requestPackage.getUri();
        String response = "";

        try {
            URL url = new URL(uri);
            con = (HttpURLConnection) url.openConnection();
            con.setReadTimeout(requestPackage.getReadTimeout());
            con.setConnectTimeout(requestPackage.getConTimeout());
            con.setRequestMethod(requestPackage.getMethod());
            con.setDoInput(requestPackage.isDoInput());
            con.setDoOutput(requestPackage.isDoOutput());

            JSONObject user = new JSONObject(requestPackage.getParams());

            OutputStream os = con.getOutputStream(); // the exception is thrown here
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
            writer.write(user.toString());
            writer.flush();
            writer.close();
            os.close();

            // Get response from the service
            int responseCode = con.getResponseCode();

            if (responseCode == HttpURLConnection.HTTP_OK) {
                // more code...
            }else
                // more code

例外是:

java.net.UnknownHostException:无法解析主机“myHostname”:否 与主机名关联的地址"

myHostname 是我的实际主机名。

当我在我的 PC 上使用相同的 url(使用 IP 和主机名)时,它可以正常工作。

只有当我使用 IP 时,它才能在手机上工作。无论是在应用程序中还是在移动浏览器中。

我在AndroidManifest.xml中添加了必要的权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

可能是对托管服务的服务器具有权限的东西吗? 它是一个内部服务器,所有机器都连接到内部 Wi-Fi 网络。但它适用于 IP...

编辑:我忘了提到我使用的是物理设备而不是模拟器。

【问题讨论】:

  • 你能从你的 Android ping myHostname 吗?
  • @DaveRlz 我不知道该怎么做。
  • '字符串 uri = requestPackage.getUri();'。我们看不到您使用的 ip 类型。也不是您将如何提供主机名。请提供点信息。从 WCF 服务所在的位置开始。
  • 'myHostname 是我的实际主机名。'。我们仍然对此一无所知。您的主机在互联网上吗?或者它是您局域网中的主机?请提供点信息。
  • '在手机上它只有在我使用 IP 时才有效。无论是在应用程序中还是在移动浏览器中。好吧,你去。那么解析主机名与你的应用无关。

标签: java android httpurlconnection


【解决方案1】:

没关系。 Android 告诉你手机无法解析名称“myHostname”。 这取决于您的网络拓扑。 我认为手机与接入点上的 wifi 连接,该接入点与您的 pc 和您的 myHostname 主机所在的局域网有线连接。 你的电脑在它的局域网连接上有一个 dns 服务器,或者只是用局域网广播解析名称。 当然,您还没有在手机上使用的连接上配置 dns 服务器。 如果你的局域网上有dns服务器,那就在连接上设置它,否则我认为手机无法通过广播解析。

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 2014-02-25
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多