首页 > 代码库 > Mina传递对象
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 =http://www.mamicode.com/ 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 =http://www.mamicode.com/ 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 =http://www.mamicode.com/ 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 =http://www.mamicode.com/ 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); }}
Mina传递对象
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。