【问题标题】:How to implement an HTTP server on android如何在android上实现一个HTTP服务器
【发布时间】:2011-11-08 06:14:00
【问题描述】:

我在 WIFI 提供的同一 LAN 上有两个 android 应用程序:

  1. 在端口 8033 上打开侦听套接字的应用 (A)
  2. App (B) 使用 HttpClient 访问 (A) 端口 8033

如何使 (A) 可以在 (B) 上执行 POST 和 GET 请求?
(A) 用来访问 (B) 的 URL 是什么样的?

谢谢大家。

【问题讨论】:

  • @Jonas 他的问题不是客户端是否可以与服务器通信,而是 HttpClient 是否可以与他的其他应用正在侦听的服务器套接字通信。

标签: android sockets client httpclient httpserver


【解决方案1】:

您可能会混淆两种不同级别的网络通信。

第 4 级:两个套接字之间的 TCP 连接。
到侧之间的逻辑管道(可能是单个(两个进程?)或两台不同的计算机) 此级别仅处理连接处理数据

第 7 级:浏览器/应用程序服务器使用特定的通信“语言”来交换高级数据(文件、图像、音频..)和在此级别处理。

您的问题是要打开一个侦听套接字(第 4 级)和一个使用 HTTP 协议(​​第 7 级)与之交谈的客户端。

因此,您错过了填补套接字侦听端处理 HTTP 的空白协议
可能是一个 java web server 实现可能对你有帮助。

【讨论】:

  • 好的,谢谢。但是我在哪里可以找到 Android 和 TJWS 的工作示例。我查看了 URL,但我是一个完整的 java 菜鸟,所以如果我得到一些代码,那么我很容易理解它。
  • Tiny Java Web Server 实现 JEE(java 企业版)定义的标准 servlet 容器:所以我的建议是 1)寻找“如何在 android 项目中实现第三方库/jar” 2)学习更多的 java 标准版(经典)和企业版(典型地用于 java 用于应用程序服务器)参见示例 java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html .. 参见示例 apl.jhu.edu/~hall/java/Servlet-Tutorial/…
  • 我遇到了这个链接“androiddevblog.net/android/…”,它正在做我想做的事。你同意吗?
  • 我想这是制作轻量级http服务器的好方法。你应该尝试一下。我相应地更新了我的答案。祝你好运
【解决方案2】:

侦听端口并接受套接字连接不足以将数据返回给 HttpClient。实际上,套接字提供了一个物理管道,但对沿该管道流动的数据的格式一无所知。如果您打算使用 HttpClient,那么您需要让您的服务器应用程序理解 HTTP 协议(​​或至少它的一个非常基本的子集)。

如果您只需要让两个进程以某种方式进行通信,最好让您的服务器应用程序成为一项服务,然后您的客户端应用程序向该服务询问所需的数据。

【讨论】:

  • 如何让服务器套接字理解 HTTP 协议,对不起,我忘了写客户端将在其他 android 设备上,而服务器将在不同的设备上。
  • “物理管道”可能是一个限制性的观点......在单个设备上,您可能有一个监听套接字和一个客户端。没有任何物理链接
  • 我发现了许多 HTTPClient 示例,它们在 java 中查询 webserver 和正常的服务器和客户端套接字通信,但我找不到任何实现 HTTP 协议等的服务器套接字示例的示例。
  • 你不会找到很多服务器套接字理解HTTP协议的例子,因为它相当复杂。大约 12 到 13 年前,我不得不用 Java 实现 HTTP 服务器——只是基本的 HTTP 请求解析就占用了 1000 多行代码。除非您很好地理解 HTTP 协议(​​并且从您的问题来看您不了解),否则我强烈建议您不要这样做。最后,在我看来,让一个设备通过套接字与另一个设备通信是一种有点奇怪的方法。
  • 你说得对,我对协议知之甚少,我问这个问题的主要原因是我面临的问题是在 Android 中创建一个 WebServer 我已经查看了 iJetty 和 TJWS 但是当我'我完全是java中的菜鸟,我无法理解它,所以我想如果可以让两种不同的事物相互交流,我怀疑它会起作用,这就是为什么我在我的问题中说“它可能很愚蠢”。感谢您的帮助。
【解决方案3】:

我一直在寻找相同的解决方案并发现 NanoHTTPD - 一个极其简单的 HTTP 请求处理服务器类。您可以在https://github.com/NanoHttpd找到源代码和非常容易理解的示例

【讨论】:

    【解决方案4】:

    查看 github 上的 AndServer 项目。它是Android 平台 的Web 服务器和Web 框架。它提供了像 SpringMVC 这样的注解。

    @RestController
    @RequestMapping(path = "/user")
    public class UserController {
    
        @PostMapping("/login")
        public String login(@RequestParam("account") String account,
                            @RequestParam("password") String password) {
    
            ...
            return "Successful.";
        }
    
        @GetMapping(path = "/{userId}")
        public User info(@PathVariable("userId") String userId,
                         @QueryParam("fields") String fields) {
    
            User user = findUserById(userId, fields);
            ...
    
            return user;
        }
    
        @PutMapping(path = "/{userId}")
        public void modify(@PathVariable("userId") String userId
                           @RequestParam("age") int age) {
            ...
        }
    }
    

    简单部署

    Server server = AndServer.webServer(context)
        .port(8080)
        .timeout(10, TimeUnit.SECONDS)
        .build();
    
    // startup the server.
    server.startup();
    
    ...
    
    // shutdown the server.
    server.shutdown();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 2016-07-29
      相关资源
      最近更新 更多