使用Mina传输Java对象
2012-06-14 14:16
274 查看
This is apache-mina-2.0.4, please drink code....
下面是所要传输的实体类UserInfo.java
下面是Mina编写的服务端主类MyServer.java
下面是服务端的消息处理器ServerHandler.java
接下来是Mina编写的客户端主类MyClient.java
最后是客户端的消息处理器ClientHandler.java
下面是所要传输的实体类UserInfo.java
package com.mina.model; import java.io.Serializable; /** * @see Mina传输的实体类,要求其实现Serializable接口 */ @SuppressWarnings("serial") public class UserInfo implements Serializable{ private String name; public UserInfo(String name){ this.name = name; } public String getName() { return name; } }
下面是Mina编写的服务端主类MyServer.java
package com.mina.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.transport.socket.nio.NioSocketAcceptor; public class MyServer { public static void main(String[] args) throws IOException { int bindPort = 9876; IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); //设定服务器解析消息的规则是以Object对象为单位进行传输,注意此时该对象需实现Serializable接口 acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); acceptor.setHandler(new ServerHandler()); acceptor.bind(new InetSocketAddress(bindPort)); System.out.println("MinaServer is startup, and it`s listing on := " + bindPort); } }
下面是服务端的消息处理器ServerHandler.java
package com.mina.server; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import com.mina.model.UserInfo; public class ServerHandler extends IoHandlerAdapter { @Override public void messageReceived(IoSession session, Object message) throws Exception { UserInfo ui = (UserInfo)message; //我们已设定了服务器解析消息的规则是以UserInfo对象为单位进行传输 System.out.println("收到客户机发来的用户名:" + ui.getName()); session.write(new UserInfo(ui.getName() + "==>>是个神秘的人")); } @Override public void sessionOpened(IoSession session) throws Exception{ System.out.println("InComing Client:" + session.getRemoteAddress()); } }
接下来是Mina编写的客户端主类MyClient.java
package com.mina.client; import java.net.InetSocketAddress; import org.apache.mina.core.service.IoConnector; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector; import com.mina.model.UserInfo; public class MyClient { public static void main(String[] args) { IoConnector connector = new NioSocketConnector(); connector.setConnectTimeoutMillis(30000); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); connector.setHandler(new ClientHandler(new UserInfo("张起灵"))); connector.connect(new InetSocketAddress("127.0.0.1", 9876)); } }
最后是客户端的消息处理器ClientHandler.java
package com.mina.client; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import com.mina.model.UserInfo; public class ClientHandler extends IoHandlerAdapter { private final UserInfo ui; public ClientHandler(UserInfo ui){ this.ui = ui; } @Override public void sessionOpened(IoSession session) throws Exception { session.write(ui); } @Override public void messageReceived(IoSession session, Object message) throws Exception { UserInfo ui = (UserInfo)message; System.out.println("收到服务机发来的用户名:" + ui.getName()); } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { System.out.println("与" + session.getRemoteAddress() + "通信过程中出现错误:[" + cause.getMessage() + "]..连接即将关闭...."); session.close(false); session.getService().dispose(); } }
相关文章推荐
- 使用MINA和XML marshal 传递JAVA 对象
- mina学习基础-入门实例-传输java对象(二)
- Java 与 Flash 使用AMF对象传输最终方案
- Mina二进制传输对象IoBuffer的使用
- Mina二进制传输对象IoBuffer的使用
- Mina使用总结(四)传输对象ObjectSerializationCodecFactory
- 使用mina2对象传输数据是,传输的数据序列化错误与解决方案
- 深入java面向对象四:Java 内部类种类及使用解析(转)
- Apache CXF实战之三 传输Java对象
- [java]反射机制给属性使用set方法构造对象
- 使用java实现面相对象编程
- 使用Java面向对象单词必备
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
- Java 客户端后台使用HTTP POST传递对象参数到服务器端
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- 使用Comparable和Comparator对Java集合对象进行排序
- Simple-Spring-Memcached使用Protobuf序列化Java对象
- Apache CXF实战之三 传输Java对象
- Java Socket 传输对象
- java使用json-lib进行Java对象和JSON之间的转换