当前位置:操作系统 > 安卓/Android >>

android之mina框架通信学习

这几天刚学期android,目前项目要求的客户端是android平台,所以要开始啃了....
服务器与客户端的通信准备使用现有的开发框架,找了几个----mina,google 的 protobuf,smack,androidpn,Netty...
这些框架都不错,不过最终选择的是apache的mina框架,主要是mina在网上的资料比较全,用的也比较广泛,再就是也适合我项目以后的扩展加入SPRING\CXF\RESTFUL WEBSERVICE等
不废话了,开始把目前学习的进度开始进行整理,方便自己以后进行查阅,也给其他入门的兄弟们 参考参考。
当然,最重要的是希望大家能够提出并给与宝贵的经验。
 
服务端代码:
Java代码    
1. package org.demo;  
2.  
3. import java.net.InetSocketAddress;  
4. import java.nio.charset.Charset;  
5.  
6. import org.apache.mina.common.IdleStatus;  
7. import org.apache.mina.common.IoAcceptor;  
8. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
9. import org.apache.mina.filter.codec.textline.LineDelimiter;  
10. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
11. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
12. import org.slf4j.Logger;  
13. import org.slf4j.LoggerFactory;  
14.  
15.  
16. public class Demo1Server {  
17.     private static Logger logger = LoggerFactory.getLogger(Demo1Server.class);  
18.  
19.     private static int PORT = 8989;  
20.  
21.     public static void main(String[] args) {  
22.         IoAcceptor acceptor = null;  
23.         try {  
24.               
25.             // 创建一个非阻塞的server端的Socket  
26.             acceptor = new NioSocketAcceptor();  
27.             // 设置过滤器(使用Mina提供的文本换行符编解码器)  
28.             acceptor.getFilterChain().addLast(  
29.                     "codec",  
30.                     new ProtocolCodecFilter(new TextLineCodecFactory(Charset  
31.                             .forName("UTF-8"),  
32.                             LineDelimiter.WINDOWS.getValue(),  
33.                             LineDelimiter.WINDOWS.getValue())));  
34.               
35.             // 设置读取数据的缓冲区大小  
36.             acceptor.getSessionConfig().setReadBufferSize(2048);  
37.             // 读写通道10秒内无操作进入空闲状态  
38.             acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);  
39.             // 绑定逻辑处理器  
40.             acceptor.setHandler(new Demo1ServerHandler());  
41.             // 绑定端口  
42.             acceptor.bind(new InetSocketAddress(PORT));  
43.             logger.info("服务端启动成功...     端口号为:" + PORT);  
44.         } catch (Exception e) {  
45.             logger.error("服务端启动异常....", e);  
46.             e.printStackTrace();  
47.         }  
48.     }  
49. } 
 逻辑处理:
Java代码    
1. package org.demo;  
2. import java.util.Date;  
3.  
4. import net.sf.json.JSONObject;  
5.  
6. import org.apache.mina.common.IdleStatus;  
7. import org.apache.mina.common.IoHandlerAdapter;  
8. import org.apache.mina.common.IoProcessor;  
9. import org.apache.mina.common.IoSession;  
10. import org.apache.mina.transport.socket.nio.NioProcessor;  
11. import org.slf4j.Logger;  
12. import org.slf4j.LoggerFactory;  
13.  
14. public class Demo1ServerHandler extends IoHandlerAdapter{  
15.     public static Logger logger = LoggerFactory.getLogger(Demo1ServerHandler.class);  
16.  
17.     /**  
18.     * 这个方法当一个Session 对象被创建的时候被调用。对于TCP 连接来说,连接被接受的时候  
19.     * 调用,但要注意此时TCP 连接并未建立,此方法仅代表字面含义,也就是连接的对象  
20.     * IoSession 被创建完毕的时候,回调这个方法。  
21.     * 对于UDP 来说,当有数据包收到的时候回调这个方法,因为UDP 是无连接的。  
22.     */   
23.     @Override 
24.     public void sessionCreated(IoSession session) throws Exception {  
25.         logger.info("服务端与客户端创建连接...");  
26.     }  
27.  
28.     /**  
29.     * 这个方法在连接被打开时调用,它总是在sessionCreated()方法之后被调用。对于TCP 来  
30.     * 说,它是在连接被建立之后调用,你可以在这里执行一些认证操作、发送数据等。  
31.     */   
32.     @Override 
33.     public void sessionOpened(IoSession session) throws Exception {  
34.         logger.info("服务端与客户

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,