我有 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 发送请求?跟局域网路由器有关系吗?
最佳答案
问题是智能手机通过 wifi 连接,服务器通过电缆连接,将它们置于不同的子网中。
关于java - 如何通过局域网发出 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31669550/