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 ,