【发布时间】:2015-10-18 14:38:33
【问题描述】:
我有 Android 应用程序(API 14 并在装有 Android 4.4 的智能手机上运行)和 java 服务器都连接到同一个 LAN 但在不同的机器上运行。
这是servlet中的代码:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
handleRequest(request, response);
}
private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().write("yes!!!");
}
这是 Android 应用用来发出 HTTP GET 请求的代码:
URL url = new URL("http://10.200.10.66:8080/myServer/myServlet"); //this is server's LAN IP I got from ipconfig
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); //The app will indefinitely block here
String response = readUntilEndOfStream(br);
br.close();
Android 应用程序和 java servlet 分别工作。我使用相同的 Android 代码向 Google 的网络服务发出 HTTP GET 请求。如果我从服务器机器的浏览器执行http://10.200.10.67:8080/myServer/myServlet,我会得到预期的结果:
但是,如果我从 LAN 上的任何其他计算机发出相同的请求,我会得到“网页不可用”。
如果 Android 应用发出请求,它将无限期阻止 con.getInputStream()。
如何通过 LAN 发出请求?是不是跟局域网路由器有关系?
【问题讨论】:
-
什么不起作用?只要两个系统都在同一个子网上并且没有防火墙阻止,它就应该可以正常工作
-
我看不到你的问题,你能澄清一下你的问题和问题是什么吗?
-
能否粘贴您的安卓版本并启用 LTE?如果 >5.0 和 LTE 就绪,developer.android.com/reference/android/net/Network.html 可能有用。
-
Android 应用程序将在 getInputStream() 上无限期阻塞。此外,如果 LAN 上的其他机器从他们的浏览器发出 10.200.10.67:8080/myServer/myServlet 请求,他们将得到“网页不可用”
标签: java android http servlets lan