java - 如何通过局域网发出 HTTP 请求?

标签 java android http servlets lan

我有 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,我会得到预期的结果:

enter image description here

但是如果我从 LAN 上的任何其他机器发出相同的请求,我会得到“网页不可用”。 如果 Android 应用发出请求,它将无限期地阻止 con.getInputStream()

如何通过 LAN 发送请求?跟局域网路由器有关系吗?

最佳答案

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

关于java - 如何通过局域网发出 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31669550/

相关文章:

java - 如何以编程方式知道谁(其他 java 文件/类)正在使用我的 java 类?

http - 在 golang 服务器中面临 cors 问题

apache - Http2 服务器推送支持

java - javax.net.ssl.SSLSession 创建时间是多少?

java - 监听器在 Swing 应用程序中无法正常工作

java - 当 TextView 为空时,应用程序停止工作。我该如何解决?

java - 为什么签名的android apk不能在模拟器上运行

android - WebView 不像浏览器那样渲染 css?

c++ - 在命令行上启动服务器与在应用程序内启动服务器

java - 如何确保我的 Java Play 应用程序仅接受来自特定主机的 HTTP 请求?