Mina 应用开发---新手入门

时间:2022-05-14 20:30:25

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