【转】Android Http Server

Android Http Server

引言

Android如何构建Http服务器呢?本文的小例子,约莫着,还是能做个参考的^^。恩,例子实现的是PC浏览手机文件,支持了下载和删除。

准备

Http协议现今还是RFC2616吧,其基础的知识还是有必要了解的。弄份协议规范书参考,是个不错的选择。之后呢,就可以开始了^^。

起初,想自己写个Http服务器学习来着,后来懒了==。有兴趣的,推荐NanoHTTPD,很小型的仅一个类的http服务器,不过,只部分支持Http/1.1。当然还有更简单的实现例子,不过,支持的就更少更单一了。

继而,还是用了SDK内的HttpService实现的。该部分api源自apache httpcomponents项目中的http core。由于SDK的不同版本,在使用细节上与最新的http core还是有很多小差异的。至于本文例子,是api-8上的实现。

创建Server

创建WebServer,以HttpService实现服务器。其注册了3个请求处理,HttpFileHandler、HttpZipHandler、HttpDelHandler。当WebServer每接收一个连接,派发至WorkerThread,新线程处理每个请求。

WebServer部分代码:

// 创建HTTP请求执行器注册表
HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry();
// 增加HTTP请求执行器
reqistry.register("*" + SUFFIX_ZIP, new HttpZipHandler(webRoot));
reqistry.register("*" + SUFFIX_DEL, new HttpDelHandler(webRoot));
reqistry.register("*", new HttpFileHandler(webRoot));
// 设置HTTP请求执行器
httpService.setHandlerResolver(reqistry);
/* 循环接收各客户端 */
isLoop = true;
while (isLoop && !Thread.interrupted()) {
    // 接收客户端套接字
    Socket socket = serverSocket.accept();
    // 绑定至服务器端HTTP连接
    DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
    conn.bind(socket, params);
    // 派送至WorkerThread处理请求
    Thread t = new WorkerThread(httpService, conn);
    t.setDaemon(true); // 设为守护线程
    t.start();
} 

启动Server

创建了个WebService,将WebServer套进去,实现Service方式。界面很简单,就一个按钮,启动如下:

访问Server

笔记本访问上述网址呗。

  当目录存在且可读时才有上述画面,不然会简单报个404、403什么的页面。当可写时,增加删除选项。返回响应页面,在HttpFileHandler内处理的。

1)下载

文件夹:会自动打包成zip下载。其在HttpZipHandler内处理的。

文件:自动判断类型,或显示或下载。没多做处理,仍就是HttpFileHandler处理的。

2)删除

会提示是否删除。确定删除的话,会等处理结束提示完成,继而确认自动刷新。

用的jquery impromptu插件,相关css、js在assets/wfs目录内。CopyUtil提供了复制assets目录至系统目录的方法。

后记

前段时间开始看其他‘乱糟糟’的东西了。Android的小例子可能不太会再写了==。

          超进化版传送门^^

本文源码:http://pan.baidu.com/s/1rIYz6

本文转自:http://vaero.blog.51cto.com/4350852/939413

from: http://www.cnblogs.com/sishuiliuyun/p/3461084.html

时间: 2024-10-30 08:55:56

【转】Android Http Server的相关文章

Android ADB Server启动失败

Android ADB Server启动失败 启动Android Stdio的时候报如下错误: 1 2 3 4 5 Unable to create Debug Bridge: Unable to start adb server: error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 閫氬父姣忎釜濂楁帴瀛楀湴鍧?(鍗忚/缃戠粶鍦板潃/绔彛)鍙厑璁镐娇鐢ㄤ竴娆°?? (10048) c

Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案 (转)

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9401981 ADB server didn't ACK 这个问题会困恼很多的新手朋友,我以前刚开始做Android的时候也遇到过这个问题,不过自己百度,google啥的,也不知道怎么就给解决了,看到群里很多新手朋友都会问这个问题,说实话我也没有一个解决这个问题的终极方法(百试百灵的那种,哈哈),自己没遇到也没有认真的去对待他,今天,就是在今天,我打开Eclipse连上手机,准备调试程

使用Volley来写一个List列表(Valley可以解决很大一部分android请求server的问题)

先上效果图: 先写一个Volley的请求的类: public void fetchData() { String url = "http://2.novelread.sinaapp.com/framework-sae/index.php"; // String body = ""; // try { // mEntity = new StringEntity(body); // } catch (UnsupportedEncodingException e1) {

The connection to adb is down, and a severe error has occured. Android ADB server didn't ACK * failed to start daemon. 解决方案

ADB server didn't ACK 这个问题会困恼很多的新手朋友,我以前刚开始做Android的时候也遇到过这个问题,不过自己百度,google啥的,也不知道怎么就给解决了,看到群里很多新手朋友都会问这个问题,说实话我也没有一个解决这个问题的终极方法(百试百灵的那种,哈哈),自己没遇到也没有认真的去对待他,今天,就是在今天,我打开Eclipse连上手机,准备调试程序,出现如下的信息 The connection to adb is down, and a severe error has

[Android]ADB Server didn't ACK错误的解决方法

Eclipse中调试的时候报错 [2014-06-18 13:07:49 - DinnerBooker] The connection to adb is down, and a severe error has occured.[2014-06-18 13:07:49 - DinnerBooker] You must restart adb and Eclipse.[2014-06-18 13:07:49 - DinnerBooker] Please ensure that adb is co

Android与Server端的传输加密

1.必须找一个在Android和JDK上通用的加密算法,后面发现了http://www.cnblogs.com/hjtdlx/p/3926141.html这篇文章,试了一下,是可以用的. 2.Android和Server端的传输采用JSON格式,除了加密还要校验是否被修改.传输格式: {params:xxx,sign:xxx} 其中,params为经过DES3加密的json数据,sign为原json数据md5值.这样,在收到数据后先进行DES解密,然后将解密后的json数据进行MD5,和传过来的

Eclipse下ADB报错:Android ADB server didn't ACK,解决办法

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9401981 ADB server didn't ACK 这个问题会困恼很多的新手朋友,我以前刚开始做Android的时候也遇到过这个问题,不过自己百度,google啥的,也不知道怎么就给解决了,看到群里很多新手朋友都会问这个问题,说实话我也没有一个解决这个问题的终极方法(百试百灵的那种,哈哈),自己没遇到也没有认真的去对待他,今天,就是在今天,我打开Eclipse连上手机,准备调试程

Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案

ADB server didn't ACK 这个问题会困恼很多的新手朋友,我以前刚开始做Android的时候也遇到过这个问题,不过自己百度,google啥的,也不知道怎么就给解决了,看到群里很多新手朋友都会问这个问题,说实话我也没有一个解决这个问题的终极方法(百试百灵的那种,哈哈),自己没遇到也没有认真的去对待他,今天,就是在今天,我打开Eclipse连上手机,准备调试程序,出现如下的信息 [plain] view plaincopy The connection to adb is down,

PHPHub 所有项目正式开源! (包括 iOS, Android, Web, Server, UI)

说明 趁着 团队寻找新项目 的时间空隙, 我们团队 作为练手, 为 PHPHub 做了 iOS 和 Android 客户端, 并开源, 供大家互相学习参考, 欢迎各种提 issue 和 pr ;-) PHPHub related projects PHPHub-iOS by @Aufree PHPHub-Server by @NauxLiu PHPHub-Android by @Kelvin and @Xiaoxiaoyu PHPHub-UI by @Summer and @Aufree PHP