Apache MINA 基于TCP实例

来源:互联网 发布:手机淘宝怎么与优惠券 编辑:程序博客网 时间:2024/05/16 12:17

1、基于TCP/IP服务端

server:

import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.service.IoAcceptor;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer{    public static void main( String[] args ) throws IOException    {        IoAcceptor acceptor = new NioSocketAcceptor();//创建SocketAcceptor,监听连接进来的连接     acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );//添加Log过滤器
        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) );//绑定监听的端口号
} }

 

Server Handler:

import java.util.Date;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;public class TimeServerHandler extends IoHandlerAdapter{    @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 ));    }}

 

2、基于TCP/IP客户端

clinet

public static void main(String[] args) throws Throwable {    NioSocketConnector connector = new NioSocketConnector();//创建一个连接器    connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);  //创建一个过滤器链    if (USE_CUSTOM_CODEC) {    connector.getFilterChain().addLast("codec",        new ProtocolCodecFilter(new SumUpProtocolCodecFactory(false)));    } else {        connector.getFilterChain().addLast("codec",            new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));    }    connector.getFilterChain().addLast("logger", new LoggingFilter());    connector.setHandler(new ClientSessionHandler(values));    IoSession session;    for (;;) {        try {            ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT));            future.awaitUninterruptibly();            session = future.getSession();            break;        } catch (RuntimeIoException e) {            System.err.println("Failed to connect.");            e.printStackTrace();            Thread.sleep(5000);        }    }    // wait until the summation is done    session.getCloseFuture().awaitUninterruptibly();    connector.dispose();}

 

原创粉丝点击