无法通过 WiFi 连接,但可以通过移动数据连接
Can't connect through WiFi, but possible through Mobile Data
我有一个名为 test.php
的 php
文件存储在我的 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
一切正常。
AndroidActivity代码
@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) 为什么我无法通过 Mobile Data
完全正常的 WiFi network
连接?
2) 如何解决这个问题?
注意:有时会连接,有时不会。
您的 DNS 不知道所请求站点的 IP 地址。
您遇到了问题,因为您的 Wifi 连接的 DNS 无法将主机名转换为 IP 地址。
并且您的数据载体正在使用不同的 DNS,该 DNS 将 IP 地址关联到主机名。
尝试更改 Wifi 路由器上的 DNS 服务器地址或使用网站的直接 IP 地址(如果可用)。
这里有一些 google DNS 服务器地址
- 8.8.8.8
- 8.8.4.4
您可能遇到了 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 条目,而另一个 CNAME 条目又指向亚马逊上的 A 记录。 CNAME 的双重间接访问违反了 DNS RFC,尽管大多数解析器无论如何都应该处理它。此外,如果这是问题所在,它应该同样影响 WiFi 和移动数据。
我有一个名为 test.php
的 php
文件存储在我的 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
一切正常。
AndroidActivity代码
@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) 为什么我无法通过 Mobile Data
完全正常的 WiFi network
连接?
2) 如何解决这个问题?
注意:有时会连接,有时不会。
您的 DNS 不知道所请求站点的 IP 地址。
您遇到了问题,因为您的 Wifi 连接的 DNS 无法将主机名转换为 IP 地址。 并且您的数据载体正在使用不同的 DNS,该 DNS 将 IP 地址关联到主机名。
尝试更改 Wifi 路由器上的 DNS 服务器地址或使用网站的直接 IP 地址(如果可用)。
这里有一些 google DNS 服务器地址
- 8.8.8.8
- 8.8.4.4
您可能遇到了 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 条目,而另一个 CNAME 条目又指向亚马逊上的 A 记录。 CNAME 的双重间接访问违反了 DNS RFC,尽管大多数解析器无论如何都应该处理它。此外,如果这是问题所在,它应该同样影响 WiFi 和移动数据。