无法通过 WiFi 连接,但可以通过移动数据连接

Posted

技术标签:

【中文标题】无法通过 WiFi 连接,但可以通过移动数据连接【英文标题】:Can't connect through WiFi, but possible through Mobile Data 【发布时间】:2015-12-24 15:53:32 【问题描述】:

我有一个名为 test.phpphp 文件存储在我的 Openshift 服务器 (http://phpgear-shifz.rhcloud.com/v1/test.php) 中,代码如下。

<?php
echo "Hello";

任务

我正在尝试从 android 应用程序下载文本。

问题

我通过WiFi 网络连接时收到java.net.UnknownHostException: Unable to resolve host "phpgear-shifz.rhcloud.com": No address associated with hostname,但Mobile Data 一切正常。

Android 活动代码

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        final TextView tvTest  = (TextView) findViewById(R.id.tvTest);

        new AsyncTask<Void, Void, String>() 
            @Override
            protected String doInBackground(Void... params) 

                try 
                    final URL url = new URL("http://phpgear-shifz.rhcloud.com/v1/test.php");
                    final BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
                    final StringBuilder sb = new StringBuilder();
                    String line;
                    while((line = br.readLine())!=null)
                        sb.append(line).append("\n");
                    

                    br.close();
                    return sb.toString();

                 catch (IOException e) 
                    e.printStackTrace();
                    return "Error: "  + e.getMessage();
                
            

            @Override
            protected void onPostExecute(String result) 
                tvTest.setText(result);
            
        .execute();

    

回应

在 WiFi 上

关于移动数据

问题

1) 为什么我无法通过WiFi network 连接,而Mobile Data 完全没问题?

2) 如何解决这个问题?

注意:有时会连接,有时不会。

【问题讨论】:

您确定 wifi 路由器已连接到互联网吗?即您是否能够从连接到同一个 wifi 的设备/计算机访问 url phpgear-shifz.rhcloud.com/v1/test.php ? 是的,我很确定互联网连接,并且可以从设备访问该 URL。 我认为您对 ACCESS_NETWORK_STATE &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&gt; 有剩余的 Android Manifest 权限 我不这么认为,反正这是清单pastebin.com/reqDaPdb 我为什么要拥有Network state permission ?我认为我们只需要Internet 访问互联网的权限,而只有当我们想检查互联网的STATE 时才需要Network state permission。不是吗? 【参考方案1】:

您的 DNS 不知道所请求站点的 IP 地址。

您遇到了问题,因为您的 Wifi 连接的 DNS 无法将主机名转换为 IP 地址。 并且您的数据载体正在使用不同的 DNS,该 DNS 已将 IP 地址与主机名相关联。

尝试更改 Wifi 路由器上的 DNS 服务器地址,或使用网站的直接 IP 地址(如果有)。

以下是一些谷歌 DNS 服务器地址

8.8.8.8 8.8.4.4

【讨论】:

我无法从任何 WiFi 连接进行连接。我认为使用我的App 的人不会为特定应用程序更改他们的WiFi 配置。我现在能做什么? 我在 wifi 上,我可以看到你好消息。 @Shifar 请检查您的路由器 DNS 设置,它应该可以工作。我可以使用 wifi 看到它 @ShifarShifz screenshot,您的代码正在我的手机上通过 WiFi 运行。 DNS 将自动更新,但在特殊情况下最多可能需要 48 小时,通常在 4 hours 内。您可以将 DNS 更改为 Google 的 DNS(8.8.8.88.8.4.4)。这仅在问题确实是 DNS 时才有效。我认为不是的情况。【参考方案2】:

您可能遇到 IPv4 与 IPv6 的问题。许多移动数据计划使用 IPv6,而目前大多数 WiFi 安装使用 IPv4,因此您可能切换的不仅仅是网络层;您实际上可能正在切换第 3 层协议。

phpgear-shifz.rhcloud.com 的 DNS 条目(仅)指向 IPv4 地址,因此它应该在 WiFi 上工作。但也许您的移动设备使用 IPv6 DNS 服务器,无法通过 IPv4 解析名称?

另一种可能性:您的移动设备在 IPv4 堆栈中可能存在更普遍的问题。您的移动数据可能正在使用 6 到 4 转换技术之一,从而绕过您的本地 IPv4 问题。

我注意到 DNS 名称 phpgear-shifz.rhcloud.com 的另一个问题,尽管我怀疑它是否相关。

该 DNS 条目实际上是一个 CNAME 条目,它指向另一个 CNAME 条目,而后者又指向亚马逊上的 A 记录。 CNAME 的双重间接寻址违反了 DNS RFC,尽管大多数解析器无论如何都应该处理它。此外,如果这是问题所在,它应该同样影响 WiFi 和移动数据。

【讨论】:

以上是关于无法通过 WiFi 连接,但可以通过移动数据连接的主要内容,如果未能解决你的问题,请参考以下文章

网络显示已连接但是无法访问互联网是怎么回事?求帮助。

如何判断“移动网络数据”是启用还是禁用(即使通过 WiFi 连接)?

无法通过 Multipeer Connectivity 连接蓝牙

当连接是移动数据 xamarin 表单时,无法在服务器上发出 Put 和 Post 请求

为啥我手机wifi已连接,但无法访问互联网?

手机wifi已连接但无法访问互联网怎么回事?