繁体   English   中英

使用主机名时 HttpURLConnection 无法解析主机

[英]HttpURLConnection unable to resolve host when using host name

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

我的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.network。 但它适用于 IP...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM