apache mina 学习(一)-----时间服务器

timeServer的例子:

服务器:

public class TimeMachineServer {

	    private static final int PORT = 9123;

	    public static void main( String[] args ) throws IOException
	    {
	        IoAcceptor acceptor = new NioSocketAcceptor();

	        acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
	        acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

	        acceptor.setHandler( new TimeServerHandler() );
		acceptor.getSessionConfig().setReadBufferSize( 2048 );
	        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
	        acceptor.bind( new InetSocketAddress(PORT) );
	    }

}
TimeServerHandler:

package com.yushh.test.timeMachine;

import java.util.Date;

import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler implements IoHandler {

	 @Override
	    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
	    {
	        cause.printStackTrace();
	    }

	    @Override
	    public void messageReceived( IoSession session, Object message ) throws Exception
	    {
	        String str = message.toString();
	        if( str.trim().equalsIgnoreCase("quit") ) {
	            session.close();
	            return;
	        }

	        Date date = new Date();
	        session.write( date.toString() );
	        System.out.println("Message written...");
	    }

	    @Override
	    public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
	    {
	        System.out.println( "IDLE " + session.getIdleCount( status ));
	    }

		@Override
		public void messageSent(IoSession arg0, Object arg1) throws Exception {
		}

		@Override
		public void sessionClosed(IoSession arg0) throws Exception {
		}

		@Override
		public void sessionCreated(IoSession arg0) throws Exception {
		}

		@Override
		public void sessionOpened(IoSession arg0) throws Exception {
		}
}


客户端测试:


服务器端输出:

2012-03-13 18:00:17  CREATED
2012-03-13 18:00:17  CREATED
2012-03-13 18:00:17  OPENED
2012-03-13 18:00:17  OPENED
2012-03-13 18:00:20  RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A]
2012-03-13 18:00:20  RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A]
2012-03-13 18:00:20  Processing a MESSAGE_RECEIVED for session 2
2012-03-13 18:00:20  Processing a MESSAGE_RECEIVED for session 2
Message written...
2012-03-13 18:00:20  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:20  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:30  IDLE
2012-03-13 18:00:30  IDLE
IDLE 1
2012-03-13 18:00:34  RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A]
2012-03-13 18:00:34  RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A]
2012-03-13 18:00:34  Processing a MESSAGE_RECEIVED for session 2
2012-03-13 18:00:34  Processing a MESSAGE_RECEIVED for session 2
Message written...
2012-03-13 18:00:34  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:34  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:34  RECEIVED: HeapBuffer[pos=0 lim=2 cap=1024: 0D 0A]
2012-03-13 18:00:34  RECEIVED: HeapBuffer[pos=0 lim=2 cap=1024: 0D 0A]
2012-03-13 18:00:34  Processing a MESSAGE_RECEIVED for session 2
2012-03-13 18:00:34  Processing a MESSAGE_RECEIVED for session 2
Message written...
2012-03-13 18:00:34  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:34  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:34  RECEIVED: HeapBuffer[pos=0 lim=2 cap=1024: 0D 0A]
2012-03-13 18:00:34  RECEIVED: HeapBuffer[pos=0 lim=2 cap=1024: 0D 0A]
2012-03-13 18:00:34  Processing a MESSAGE_RECEIVED for session 2
2012-03-13 18:00:34  Processing a MESSAGE_RECEIVED for session 2
Message written...
2012-03-13 18:00:34  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:34  SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
2012-03-13 18:00:44  IDLE
2012-03-13 18:00:44  IDLE
IDLE 1
2012-03-13 18:00:54  IDLE
2012-03-13 18:00:54  IDLE
IDLE 2
2012-03-13 18:01:04  IDLE
2012-03-13 18:01:04  IDLE
IDLE 3
2012-03-13 18:01:14  IDLE
2012-03-13 18:01:14  IDLE
IDLE 4
2012-03-13 18:01:24  IDLE
2012-03-13 18:01:24  IDLE
IDLE 5
2012-03-13 18:01:34  IDLE
2012-03-13 18:01:34  IDLE
IDLE 6
2012-03-13 18:01:44  IDLE
2012-03-13 18:01:44  IDLE
IDLE 7
2012-03-13 18:01:54  IDLE
2012-03-13 18:01:54  IDLE
IDLE 8
2012-03-13 18:02:04  IDLE
2012-03-13 18:02:04  IDLE
IDLE 9
2012-03-13 18:02:14  IDLE
2012-03-13 18:02:14  IDLE
IDLE 10
2012-03-13 18:02:24  IDLE
2012-03-13 18:02:24  IDLE
IDLE 11
2012-03-13 18:02:34  IDLE
2012-03-13 18:02:34  IDLE
IDLE 12
2012-03-13 18:02:44  IDLE
2012-03-13 18:02:44  IDLE
IDLE 13
2012-03-13 18:02:54  IDLE
2012-03-13 18:02:54  IDLE
IDLE 14
2012-03-13 18:03:04  IDLE
2012-03-13 18:03:04  IDLE
IDLE 15

注意:

1、IoAcceptor的Handler需要自己实现

2、理解IoHandler的方法的含义


具体例子解释请看下章。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,mina-filter是一个用于Apache MINA(Multipurpose Infrastructure for Network Applications)框架的过滤器。MINA是一个基于Java的网络应用程序框架,用于开发高性能和可扩展的网络应用程序。 MINA框架使用过滤器链来处理输入和输出数据。过滤器链由多个过滤器组成,每个过滤器负责处理特定的任务,例如数据压缩、数据加密、协议解析等。过滤器链可以根据应用程序的需求进行配置和定制。 以下是一个使用mina-filter的示例: ```java import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.filterchain.IoFilterAdapter; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.logging.LoggingFilter; public class MinaFilterExample { public static void main(String[] args) { // 创建过滤器链 DefaultIoFilterChainBuilder filterChain = new DefaultIoFilterChainBuilder(); // 添加日志过滤器 filterChain.addLast("logger", new LoggingFilter()); // 添加协议编解码过滤器 filterChain.addLast("codec", new ProtocolCodecFilter(new MyProtocolCodecFactory())); // 添加自定义过滤器 filterChain.addLast("myFilter", new MyFilter()); // 创建MINA服务器 NioSocketAcceptor acceptor = new NioSocketAcceptor(); acceptor.setFilterChainBuilder(filterChain); // 启动服务器 try { acceptor.bind(new InetSocketAddress(8888)); System.out.println("Server started on port 8888"); } catch (IOException e) { e.printStackTrace(); } } // 自定义协议编解码工厂 private static class MyProtocolCodecFactory implements ProtocolCodecFactory { // 实现编解码逻辑 // ... } // 自定义过滤器 private static class MyFilter extends IoFilterAdapter { @Override public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception { // 处理接收到的消息 // ... } @Override public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { // 处理发送的消息 // ... } } } ``` 上述示例中,我们创建了一个MINA服务器,并配置了一个过滤器链。过滤器链包括日志过滤器、协议编解码过滤器和自定义过滤器。日志过滤器用于记录日志信息,协议编解码过滤器用于处理数据的编码和解码,自定义过滤器用于处理接收和发送的消息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值