我在php
服务器(http://phpgear-shifz.rhcloud.com/v1/test.php)中存储了名为test.php
的{{1}}文件,代码如下。
Openshift
任务
我正在尝试从Android应用程序下载文本。
问题
我在通过<?php
echo "Hello";
网络连接时收到java.net.UnknownHostException: Unable to resolve host "phpgear-shifz.rhcloud.com": No address associated with hostname
,但WiFi
一切正常。
Android活动代码
Mobile Data
应答
WiFi上的移动数据
问题
1)为什么我无法通过 @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 network
完全没问题?
2)如何解决这个问题?
注意:有时它会连接,有时则不会。
答案 0 :(得分:5)
您的DNS并不知道所请求网站的IP地址。
您遇到问题,因为您的Wifi连接的DNS无法将主机名转换为IP地址。 并且您的数据载体正在使用不同的DNS,该DNS具有与主机名相关联的IP地址。
尝试更改Wifi路由器上的DNS服务器地址,或使用网站的直接IP地址(如果有)。
以下是一些谷歌DNS服务器地址
答案 1 :(得分: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条目,该条目又指向亚马逊上的A记录。 CNAME的双重间接违反了DNS RFC,但大多数解析器无论如何都应该处理它。此外,如果这是问题,它应该同等地影响WiFi和移动数据。