zoukankan      html  css  js  c++  java
  • Mina传递对象

    利用Apache MINA来传递对象,这对了MINA来说非常容易,并且这也是Java网络编程中很常用的应用。 

    首先看两个用来传递的Java对象MyRequestObject和MyResponseObject,很简单只是实现了Serializable接口罢了。

    MyRequestObject.java

    package demo5.vo;
    
    import java.io.Serializable;
    
    public class MyRequestObject implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private String name;
        
        private String value;
    
        public MyRequestObject(String name, String value) {
            this.name = name;
            this.value = value;
        }
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
        
        @Override
        public String toString() {
            StringBuffer sb = new StringBuffer();
            sb.append("Request [name: " + name  + ", value: " + value + "]");
            return sb.toString();
        }
    }

    MyResponseObject.java

    package demo5.vo;
    
    import java.io.Serializable;
    
    public class MyResponseObject implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private String name;
        
        private String value;
    
        public MyResponseObject(String name, String value) {
            this.name = name;
            this.value = value;
        }
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
        
        @Override
        public String toString() {
            StringBuffer sb = new StringBuffer();
            sb.append("Response [name: " + name  + ", value: " + value + "]");
            return sb.toString();
        }
    }

    Server端的代码

    MyServer.java

    package demo5.server;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    
    import org.apache.mina.core.service.IoAcceptor;
    import org.apache.mina.core.session.IdleStatus;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
    import org.apache.mina.filter.logging.LoggingFilter;
    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    
    public class MyServer {
        
        private static final Logger logger = LoggerFactory.getLogger(MyServer.class);
        
        
        public static void main(String[] args) {
            int bindPort = 10000;
            
            IoAcceptor acceptor = new NioSocketAcceptor();
            
            //调用IoSessionConfig设置读取数据的缓冲区大小、读写通道均在10秒内无任何操作就进入空闲状态
            acceptor.getSessionConfig().setReadBufferSize(2048);
            acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
            
            acceptor.getFilterChain().addLast("logger", new LoggingFilter());
            acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
    
            acceptor.setHandler(new MyServerHandler());
            
            try {
                acceptor.bind(new InetSocketAddress(bindPort));
            } catch (IOException ex) {
                logger.error(ex.getMessage(), ex);
            }
        }
    }

    MyServerHandler.java

    package demo5.server;
    
    import org.apache.mina.core.service.IoHandlerAdapter;
    import org.apache.mina.core.session.IdleStatus;
    import org.apache.mina.core.session.IoSession;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import demo5.vo.MyRequestObject;
    import demo5.vo.MyResponseObject;
    
    public class MyServerHandler extends IoHandlerAdapter{
        private static final Logger logger = LoggerFactory.getLogger(MyServerHandler.class);
        
        @Override
        public void sessionCreated(IoSession session) throws Exception {
            System.out.println("IP:"+session.getRemoteAddress().toString());
        }
        
        @Override
        public void sessionOpened(IoSession session) throws Exception {
        }
    
        @Override
        public void sessionClosed(IoSession session) throws Exception {
            System.out.println("IP:"+session.getRemoteAddress().toString()+"断开连接");
        }
    
        @Override
        public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
            System.out.println( "IDLE " + session.getIdleCount( status ));
        }
    
        @Override
        public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
            logger.error(cause.getMessage(), cause);
            session.close(true);
        }
    
        @Override
        public void messageReceived(IoSession session, Object message) throws Exception {
            logger.info("Received " + message);
            MyRequestObject myReqOjb = (MyRequestObject) message;
            MyResponseObject myResObj = new MyResponseObject(myReqOjb.getName(), myReqOjb.getValue());
            session.write(myResObj);
        }
    
        @Override
        public void messageSent(IoSession session, Object message) throws Exception {
            logger.info("Sent " + message);
        }
    
    }

    Client端代码:

    MyClient.java

    package demo5.client;
    
    import java.net.InetSocketAddress;
    
    import org.apache.mina.core.RuntimeIoException;
    import org.apache.mina.core.future.ConnectFuture;
    import org.apache.mina.core.service.IoConnector;
    import org.apache.mina.core.session.IoSession;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
    import org.apache.mina.filter.logging.LoggingFilter;
    import org.apache.mina.transport.socket.nio.NioSocketConnector;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    
    public class MyClient {
        
        private static final Logger logger = LoggerFactory.getLogger(MyClient.class);
        
        public static void main(String[] args) {
            int bindPort = 10000;
            String ip="localhost";
            
            IoConnector connector = new NioSocketConnector();
            connector.setConnectTimeoutMillis(10 * 1000);
            
            connector.getFilterChain().addLast("logger", new LoggingFilter());
            connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
            
            connector.setHandler(new MyClientHandler());
    
            IoSession session = null;
            try {
                ConnectFuture future = connector.connect(new InetSocketAddress(ip, bindPort));
                future.awaitUninterruptibly();
                session = future.getSession();
            } catch (RuntimeIoException e) {
                logger.error(e.getMessage(), e);
            }
    
            session.getCloseFuture().awaitUninterruptibly();
            connector.dispose();
        }
    }

    MyClientHandler.java

    package demo5.client;
    
    import org.apache.mina.core.service.IoHandlerAdapter;
    import org.apache.mina.core.session.IdleStatus;
    import org.apache.mina.core.session.IoSession;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import demo5.vo.MyRequestObject;
    import demo5.vo.MyResponseObject;
    
    public class MyClientHandler extends IoHandlerAdapter{
        private static final Logger logger = LoggerFactory.getLogger(MyClientHandler.class);
        
        @Override
        public void sessionCreated(IoSession session) throws Exception {
        }
    
        @Override
        public void sessionOpened(IoSession session) throws Exception {
            MyRequestObject myObj = new MyRequestObject("我的name", "我的value");
            session.write(myObj);
        }
    
        @Override
        public void sessionClosed(IoSession session) throws Exception {
        }
    
        @Override
        public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        }
    
        @Override
        public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
            logger.error(cause.getMessage(), cause);
            session.close(true);
        }
    
        @Override
        public void messageReceived(IoSession session, Object message) throws Exception {
            MyResponseObject myResObj = (MyResponseObject) message;
            logger.info("Received " + myResObj);
            session.close(true);
        }
    
        @Override
        public void messageSent(IoSession session, Object message) throws Exception {
            logger.info("Sent " + message);
        }
    
    }
  • 相关阅读:
    Oracle 获取表结构信息
    EasyUI layout动态设置Split属性
    jquery easyui-datagrid 如何清空数据
    ORacle 复制表
    aspx调用webmethod
    RDLC添加链接
    Nginx 负载均衡 ip_hash , hash key(consistent) url_hash, least_conn
    Nginx 提升吞吐量利器 Keeplived
    Nginx Gzip 的正确使用
    Nginx 切割日志
  • 原文地址:https://www.cnblogs.com/gisblogs/p/3951984.html
Copyright © 2011-2022 走看看