最近因为工做内容比较空闲,加上对于Java网络框架方面知识的欠缺,决定深刻学习NIO框架Mina及Netty;如下是Mina框架最简单的HelloWorld Demo。windows
MinaServer:
public class MinaServer { public static void main(String[] args){ try { //建立一个IoAcceptor实例 NioSocketAcceptor acceptor = new NioSocketAcceptor(); //添加解码器 acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory())); //添加日志 acceptor.getFilterChain().addLast("logger", new LoggingFilter()); //指定IoHandler acceptor.setHandler(new MinaServerAdapter()); //绑定端口 acceptor.bind(new InetSocketAddress(Constants.PORT)); } catch (IOException e) { e.printStackTrace(); } } }
MinaServerAdapter
public class MinaServerAdapter extends IoHandlerAdapter { //sessionCreated:建立时回调 @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("sessionCreated"); } //sessionOpened:打开时回调 @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("sessionOpened"); } //sessionClosed:关闭时回调 @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("sessionClosed"); } //sessionIdle:进入空闲时回调 @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { System.out.println("sessionIdle"); } //出现异常时回调 @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace(); System.out.println("exceptionCaught:"+cause.getMessage()); } /** * 接收到消息时回调 */ @Override public void messageReceived(IoSession session, Object message) throws Exception { String str = message.toString(); System.out.println("Received Message is: " + str); if("exit".equals(str)){ System.out.println("client exit: " + str); session.write("client exit"); session.closeNow(); return; } Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); session.write(format.format(date)+" Received Client Message : "+message); } @Override public void messageSent(IoSession session, Object message) throws Exception { System.out.println("messageSent"); } }
此时运行MinaServer的main方法,便可启动Mina服务端。在windows系统下启动CMD/Unix系统下启动终端,输入telnet IP PORT连接到Mina服务端,并可向Mina服务端发送消息。网络
当Mina服务端收到exit字符串时,回话结束。session