【发布时间】:2015-10-16 12:56:44
【问题描述】:
我已经检查了大多数关于同一问题的主题,但我找不到解决方案。
我的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 网络。但它适用于 IP...
编辑:我忘了提到我使用的是物理设备而不是模拟器。
【问题讨论】:
-
你能从你的 Android ping myHostname 吗?
-
@DaveRlz 我不知道该怎么做。
-
'字符串 uri = requestPackage.getUri();'。我们看不到您使用的 ip 类型。也不是您将如何提供主机名。请提供点信息。从 WCF 服务所在的位置开始。
-
'myHostname 是我的实际主机名。'。我们仍然对此一无所知。您的主机在互联网上吗?或者它是您局域网中的主机?请提供点信息。
-
'在手机上它只有在我使用 IP 时才有效。无论是在应用程序中还是在移动浏览器中。好吧,你去。那么解析主机名与你的应用无关。
标签: java android httpurlconnection