我在 WIFI 提供的同一 LAN 上有两个 android 应用程序:
- 在端口 8033 上打开侦听套接字的应用程序 (A)
- 使用 HttpClient 在端口 8033 上访问 (A) 的应用 (B)
如何使 (A) 可以在 (B) 上执行 POST 和 GET 请求?
(A) 用来访问 (B) 的 URL 是什么样的?
谢谢大家。
我在 WIFI 提供的同一 LAN 上有两个 android 应用程序:
如何使 (A) 可以在 (B) 上执行 POST 和 GET 请求?
(A) 用来访问 (B) 的 URL 是什么样的?
谢谢大家。
您可能会混淆两种不同级别的网络通信。
级别 4:两个套接字之间的 TCP 连接。
到一侧(可能是单个(两个进程?)或两台不同的计算机)之间的逻辑管道仅在此级别处理连接处理数据
7级:浏览器/应用程序服务器使用特定的通信“语言”来交换高级数据(文件,图像,音频..)并在此级别处理。
您的问题是要打开一个侦听套接字(级别 4)和一个使用 HTTP 协议(级别 7)与之交谈的客户端。
所以你错过了填补套接字侦听端处理HTTP协议的空白
可能是一个java Web服务器实现可能会对你有所帮助。
一种拥有 HTTP 服务器的 Java EE 方式: “Tiny Java Web Server” @ http://tjws.sourceforge.net/可以帮助您找到所需的内容
拥有 HTTP 服务器的“Apache”方式http://www.androiddevblog.net/android/a-bare-minimum-web-server-for-android-platform
请参阅
http://en.wikipedia.org/wiki/OSI_model #Layer_3:_Network_Layer
以更完整地查看这些通信层
侦听端口并接受套接字连接不足以将数据返回给 HttpClient。实际上,套接字提供了一个物理管道,但对沿该管道流动的数据的格式一无所知。如果您打算使用 HttpClient,那么您需要让您的服务器应用程序了解 HTTP 协议(或者至少是它的一个非常基本的子集)。
如果您只需要让两个进程以某种方式进行通信,那么最好让您的服务器应用程序成为服务,然后您的客户端应用程序向该服务询问所需的数据。
我一直在寻找相同的解决方案,发现 NanoHTTPD - 一个非常简单的 HTTP 请求处理服务器类。您可以在https://github.com/NanoHttpd找到源代码和非常容易理解的示例
查看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();