Android搭建本地服务
来源:互联网 发布:淘宝如何找到卖家电话 编辑:程序博客网 时间:2024/05/23 22:57
在项目中涉及的本地server主要场景有两种:
1.实现类似于PC端视频播放的边看边缓冲,实现良好的播放体验
2.分享手机内容,如图片/音视频
目前接触到相关的比较好的框架是nanohttpd和AndroidAsync。 若有其他的 欢迎分享哈-_-
nanohttpd是一个轻量级的http服务框架,源码只有一个文件,应用也非常方便,如官方的一个简单的例子:
public class App extends NanoHTTPD { public App() throws IOException { super(8080); start(); System.out.println( "\nRunning! Point your browers to http://localhost:8080/ \n" ); } public static void main(String[] args) { try { new App(); } catch( IOException ioe ) { System.err.println( "Couldn't start server:\n" + ioe ); } } @Override public Response serve(IHTTPSession session) { String msg = "<html><body><h1>Hello server</h1>\n"; Map<String, String> parms = session.getParms(); if (parms.get("username") == null) { msg += "<form action='?' method='get'>\n <p>Your name: <input type='text' name='username'></p>\n" + "</form>\n"; } else { msg += "<p>Hello, " + parms.get("username") + "!</p>"; } return newFixedLengthResponse( msg + "</body></html>\n" ); }}
搭建自己的服务只需集成NanoHTTPD即可实现,在serve方法中封装实现响应形式,例子中是响应html。
AndroidAsync 是一个多功能库,从其中脱离出来的异步通信和图片加载框架ion非常受欢迎。AndroidAsync主要是一个基于NIO的异步socket,websocket,http客户端/服务端的通信框架,这里主要用到是http server。
下面这个是一个简单的返回网页的例子
AsyncHttpServer server = new AsyncHttpServer();server.get("/", new HttpServerRequestCallback() { @Override public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) { response.send("Hello!!!"); }});// listen on port 5000server.listen(5000);// browsing http://localhost:5000 will return Hello!!!
AsyncHttpServer是服务的核心类,用于服务的启动/停止,响应回调定义处理,webscoket及本地目录/文件服务。
利用server.directory即可实现本地文件服务,如
server.directory("/name" ,new File(filePath))
访问地址:http://localhost:5000/name。
遇到的问题:
1.服务启动时默认地址是localhost,经常导致外部无法访问?
答:修改为IP,修改AsyncServer的listen方法中地址的设置.
java
if (host == null)
isa = new InetSocketAddress(port);
else
isa = new InetSocketAddress(host, port);
修改为
if (host == null) isa = new InetSocketAddress(getLocalIp4Address(), port);else isa = new InetSocketAddress(host, port);
2.搭建本地文件服务,但是无法正常访问
答:在AsyncHttpServer本地文件服务映射时调用directory方法中修改
String type = getContentType(file.getAbsolutePath());response.setContentType(type);response.sendFile(file);// Util.pump(is, response, new CompletedCallback() {// @Override// public void onCompleted(Exception ex) {// response.end();// }// });
这里只是针对sd卡文件,对于asset文件未测试。
- Android搭建本地服务
- 本地搭建gitlab服务
- 如何搭建本地SVN服务
- 如何搭建本地SVN服务
- 如何搭建本地SVN服务
- 如何搭建本地SVN服务
- 本地如何搭建FPT服务
- mac搭建本地svn服务
- node.js 搭建本地服务
- Android 访问本地服务
- android监测本地服务
- android本地服务
- android中的本地服务
- Android Service(本地服务)
- Android 本地服务通知
- 前端idea+tomcat搭建本地服务
- SVN本地服务搭建 Eclipse IDEA
- 本地服务方式搭建etcd集群
- day3---面向对象
- android gradle构建工具
- perl删除文件一行内容
- struts2 脱离配置文件 全注解配置
- Android中Listview(六)--索引ListView
- Android搭建本地服务
- ElasticSearch
- Swagger+Spring MVC框架学习分享
- 安卓开发笔记——关于图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)
- 移动应用设计原则
- Lithium做进制转换
- thread
- jQuery操作得到DOM元素
- C语言的枚举及指针