首先推荐几篇Mina框架的好文章:
Mina框架研究(1)
Mina框架研究(2)
Mina框架研究(3)
环境准备:
- 首先到官方网站下载最新的 MINA 版本,地址是:http://mina.apache.org。下载之前先介绍一下 MINA 的两个版本:1.0.x 适合运行环境为 JDK1.4,1.1.x 适合 JDK1.5 的版本,两者的编译环境都需要 JDK1.5。JDK1.5 已经是非常普遍了,本文中使用 1.1.5 版本的 MINA,编译和运行所需的文件是 mina-core-1.1.5.jar。
- 下载 MINA 的依赖包 slf4j。MINA 使用此项目作为日志信息的输出,而 MINA 本身并不附带此项目包,请到http://www.slf4j.org/download.html 地址下载 slf4j 包,slf4j 项目解压后有很多的文件,本例中只需要其中的 slf4j-api-1.4.3.jar 和 slf4j-simple-1.4.3.jar 这两个 jar 文件。如果没有这两个文件就会导致启动例子程序的时候报 org/slf4j/LoggerFactory 类没找到的错误。
- 当然要求机器上必须装有 1.5 或者更新版本的 JDK。
- 最好你应该选择一个顺手的 Java 开发环境例如 Eclipse 或者 NetBeans 之类的,可以更方便的编码和调试,虽然我们的最低要求只是一个简单的文本编辑器而已。
Mina第一个HelloWorld程序:
服务端程序:
Minaserver.java:
1 public class MinaServer { 2 private IoAcceptor ioAcceptor; 3 4 public MinaServer(int port) 5 { 6 ioAcceptor = new NioSocketAcceptor(); 7 try { 8 //设置处理器 9 ioAcceptor.setHandler(new MyHandler()); 10 //绑定端口 11 ioAcceptor.bind(new InetSocketAddress(port)); 12 //规定协议,设定过滤,这里用TextLineCodecFactory文本协议 13 ioAcceptor.getFilterChain().addLast("test", new ProtocolCodecFilter(new TextLineCodecFactory())); 14 } catch (IOException e) { 15 e.printStackTrace(); 16 } 17 } 18 }
MyHandler.java: (服务端接收消息后的业务逻辑处理)
1 public class MyHandler extends IoHandlerAdapter { 2 /**接收到信息后进行逻辑处理*/ 3 @Override 4 public void messageReceived(IoSession session, Object message) 5 throws Exception { 6 String getmessage = message.toString(); 7 System.out.println(getmessage); 8 } 9 }
客户端程序:
MinaClient.java:
1 public class MinaClient { 2 private IoConnector ioConnector; 3 4 public MinaClient(String host, int port) 5 { 6 ioConnector = new NioSocketConnector(); 7 //过滤信息,封装成文本格式输出 8 ioConnector.getFilterChain().addLast("test", new ProtocolCodecFilter(new TextLineCodecFactory())); 9 10 ioConnector.setHandler(new ClientHandler("Hello world!")); 11 ioConnector.connect(new InetSocketAddress(host, port)); 12 } 13 }
ClientHandler.java:
1 public class ClientHandler extends IoHandlerAdapter { 2 //发送给服务端的消息 3 private String sendToServer; 4 5 public ClientHandler(String words) 6 { 7 sendToServer = words; 8 } 9 10 @Override 11 public void sessionOpened(IoSession session) throws Exception { 12 session.write(sendToServer); 13 } 14 }