Mina传递对象
2014-09-02 17:46
218 查看
利用Apache MINA来传递对象,这对了MINA来说非常容易,并且这也是Java网络编程中很常用的应用。
首先看两个用来传递的Java对象MyRequestObject和MyResponseObject,很简单只是实现了Serializable接口罢了。
MyRequestObject.java
MyResponseObject.java
Server端的代码
MyServer.java
MyServerHandler.java
Client端代码:
MyClient.java
MyClientHandler.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); } }
相关文章推荐
- 关于使用Mina做客户端和服务端传递对象的问题
- 浅谈Java的Mina框架传递对象
- 使用mina传递对象注意问题点以及常见报错异常处理
- Mina框架传递对象
- JAVA的Mina框架传递对象——一劳永逸(转载)
- Mina框架传递对象
- MINA传递对象时配置过滤器
- Mina框架传递对象
- 使用MINA和XML marshal 传递JAVA 对象
- 浅谈Java的Mina框架传递对象
- Mina框架传递对象
- 浅谈Java的Mina框架传递对象
- 浅谈Java的Mina框架传递对象
- Flex和Red5的交互 及对象参数传递
- 按值传递对象剖析
- android学习之intent对象传递类
- Aidl 基础其一 Aidl 单方向实现以及传递自定义类的对象
- 使用mina2对象传输数据是,传输的数据序列化错误与解决方案
- Application对象的使用-数据传递以及内存泄漏问题 和使用Memory Analyzer tool(MAT)
- Intent传递对象parcelable、serializable