【问题标题】:how to make HTTP request over local area network?如何通过局域网发出 HTTP 请求?
【发布时间】: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


【解决方案1】:

问题是智能手机是通过 wifi 连接的,而服务器是通过电缆连接的,将它们放在不同的子网中。

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多