Mina 应用开发---新手入门
注:如若转载该文章,请注明出处.谢谢!呵呵,我也是新手.因为Red5使用了Mina,为了更加深入的了解Red5决定对Mina进行一下研究.今天是一次使用Mina写程序,主要跑了下在Mina官方网站上的例子程序.下面我将从几个方面把我这次试验过程写下来,供大家批评指正:
该例子主要是提供一个时间服务,当用户通过命令行键入:telnet IP地址 端口 后就可以获得服务器的系统时间.该例子功能尽管简单,但是描述使用Mina编写TCP的应用程序的流程.
1.准备工作.
2.在Eclipse中建立基于Mina开发工程.
3.编写代码以及代码讲解.
4.测试.
1. 准备工作
下载下面的工具包,我上传了这些包中的一些JAR包,这些包对我们今天介绍的这个应用是必须得,如果你还有更多用途,还希望从官方网站下载.
MINA 1.1 Core
JDK 1.5 or greater
SLF4J 1.3.0 or greater
2. 在Eclipse中建立基于Mina开发工程
step1:选择普通Java工程类型.
step2:点击进入下一步.
step3:输入项目名称MyProject.
step4:点击进入下一步.
step5:选择标签Libraries.
step6:添加库.
step7:选择User Library.
step8:点击进入下一步.
step9:点击User Library按钮.
step10:创建新的用户库.
step11:输入用户库的名称为Mina.
step12:点击确定.
step13:出现一个Mina用户库的图标.
step14:添加Mina用户库关联的JAR包(就是上面我们附件中提供的那些包).
step15:下面我们全部按确定就可以了.
3.编写代码以及代码讲解.
我们先创建一个MinaTimeServer.java类.复制内容到剪贴板
代码:
public class MinaTimeServer {
public static void main(String[] args) {
// 入口函数.
}
}
在上面代码的基础上添加一些对象.我们主要添加一个SocketAcceptor对象,该对象用于服务器创建一个Socket监听对象,等待客户端的连接.复制内容到剪贴板代码:
public class MinaTimeServer {
public static void main(String[] args) {
ByteBuffer.setUseDirectBuffers(false);//Mina包装了J2SE中的ByteBuffer类,用法也一样,
//具体为何要这么做文档中有详细描述这里不多讲了.
ByteBuffer.setAllocator(new SimpleByteBufferAllocator());//设置缓存策略.
IoAcceptor acceptor = new SocketAcceptor();//创建一个SocketAcceptor,用于在服务器端监听客户端的连接.
}
}
刚才我们创建了SocketAcceptor,下面我们要为这个SocketAcceptor绑定一个端口,一个处理对象,一个与其相关联的配置.复制内容到剪贴板代码:
public class MinaTimeServer {
private static final int PORT = 9123;
public static void main(String[] args) throws IOException {
ByteBuffer.setUseDirectBuffers(false);
ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
IoAcceptor acceptor = new SocketAcceptor();
SocketAcceptorConfig cfg = new SocketAcceptorConfig(); //创建一个与SocketAcceptor相关联的配置对象.
cfg.getSessionConfig().setReuseAddress( true );
cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler(), cfg);//绑定端口,处理对象和配置对象.
System.out.println("MINA Time server started.");
}
}
下面我们编写一个处理连接的类 TimeServerHandler.java复制内容到剪贴板代码:
public class TimeServerHandler extends IoHandlerAdapter {
public void exceptionCaught(IoSession session, Throwable t) throws Exception { //出现异常的时候调用.
t.printStackTrace();
session.close();
}
public void messageReceived(IoSession session, Object msg) throws Exception { //接收客户端新的消息的时候调用.
String str = msg.toString();
if( str.trim().equalsIgnoreCase("quit") ) {
session.close();
return;
}
Date date = new Date();
session.write( date.toString() );
System.out.println("Message written...");
}
public void sessionCreated(IoSession session) throws Exception { //当一个客户端连接到服务器的时候被调用.
System.out.println("Session created...");
if( session.getTransportType() == TransportType.SOCKET )
((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 2048 );
session.setIdleTime( IdleStatus.BOTH_IDLE, 10 );
}
}
好了..至此我们的程序就编写完了.具体代码:
4.测试.
Step1:在Eclipse中运行该程序.
Step2:开启命令行窗口.
Step3:输入命令 telnet 127.0.0.1 9123
Step4:按回车将显示服务器的时间信息.
Step5:输入 quit 将断开连接.
Thanks