当前位置: 首页 > 知识库问答 >
问题:

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

史景铄
2023-03-14

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

我的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网。UnknownHostException:无法解析主机“myHostname”:没有与主机名关联的地址

myHostname是我的实际主机名。

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

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

我已经在AndroidManifest中添加了必要的权限。xml:

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

可能是托管服务的服务器的权限吗?这是一个内部服务器,所有机器都连接到内部无线网络。但是它使用IP...

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

共有1个答案

龚玄天
2023-03-14

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

 类似资料:
  • 问题内容: 我在Ubuntu操作系统上使用了2个容器:Gitlab-ce和gitlab-runner 容器名称是:和 我通过访问我的gitlab应用 我使用以下命令成功注册了跑步者: 然后,当我开始工作时,出现以下错误消息: 在这两个容器中,我都可以访问主机名。我认为问题来自无法解决主机的高山图像。 我该如何解决? 谢谢 编辑1 docker-compose.yml 编辑2 docker-comp

  • 问题内容: 在我的用于读取RSS链接的Android应用程序中,出现此错误: java.net.UnknownHostException:无法解析主机“ example.com”;没有与主机名关联的地址。 在模拟器中,我可以通过浏览器连接到Google。请帮助我解决此问题。 问题答案: 您可能没有权限。尝试将它添加到您的文件中: 注:以上不 必须 的前右侧的标签,但这是把它的好/正确的位置。 注意

  • 我的android应用程序中的Amazon analytics正在尝试连接到此主机“mobileanalytics.eu-west-1.amazonaws.com”,但无法解决此问题,导致以下错误: I/AmazonHttpClient:无法执行HTTP请求:无法解析主机“mobileanalytics.eu-west-1.amazonaws.com”:没有与主机名10-12 14:05:34.8

  • 当来自后台服务和移动屏幕的API调用关闭时。出现以下错误。 java.net.无法解析主机:没有与主机名相关联的地址W/System.err:在java.net.InetAddress.lookupHostByName(InetAddress.java:424)在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)在java.net

  • 我正在使用同步模块将文件表单serverA传输到服务器B。我的serverA和serverB主机是:

  • 当我尝试在android应用程序上按主机名获取ip时,我遇到了一个类似的奇怪错误。 类似的问题在IOs上返回的结果是whitout problems,但我的应用程序android没有返回任何东西。 我创建这些函数来测试我的应用程序: 但是类似的代码,在IOs上,如果我搜索我自己托管的服务器,会返回一个有效的结果,但是在android上搜索相同的页面或服务器时,结果会给我一个“无法解析主机”的警告。