Mina客户端Client和Server对象传输demo
来源:互联网 发布:爱思mac版下载 编辑:程序博客网 时间:2024/06/05 17:33
最基本的那个例子,也就是官网上的那个demo,我就不说了...
1、demo地址:http://weavesky.com/2010/02/19/mina-article-2/
但是我们实际项目中,肯定比不是如此的传输一两个数据的,我们需要传对象...老样子在此上传demo的源代码
此例子参考了himi的博文,博文地址:http://www.himigame.com/category/apache-mina
官网网站:http://mina.apache.org/mina-project/userguide/user-guide-toc.html
2、依赖的包:
mina-core-2.0.7.jar
slf4j-api-1.7.2.jar
slf4j-jdk14-1.7.2.jar
slf4j-log4j12-1.7.2.jar
3、客户端和服务端目录结构图:
一、Server
1、MinaServer
package com.potter;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.transport.socket.SocketAcceptor;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaServer {private static final int bindPort=8899;public static void main(String[] args){SocketAcceptor acceptor = new NioSocketAcceptor();DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();ProtocolCodecFilter filter= new ProtocolCodecFilter(new HCoderFactory(Charset.forName("UTF-8"))); //添加编码过滤器 处理乱码问题、编码问题chain.addLast("objectFilter",filter);//设置核心消息业务处理器acceptor.setHandler(new MinaServerHanlder());try {// 绑定端口acceptor.bind(new InetSocketAddress(bindPort));} catch (IOException e) { System.out.println("Mina Server start for error!"+bindPort);e.printStackTrace();}System.out.println("Mina Server run done! on port:"+bindPort);}}
2、MinaServerHanlder
package com.potter;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;public class MinaServerHanlder extends IoHandlerAdapter {private int count = 0;public void sessionCreated(IoSession session) {System.out.println("新客户端连接");}@Overridepublic void sessionOpened(IoSession session) throws Exception {// TODO Auto-generated method stubcount++;System.out.println("第 " + count + " 个 client 登陆!address: : "+ session.getRemoteAddress());}@Overridepublic void sessionClosed(IoSession session) throws Exception {// TODO Auto-generated method stubsession.close();System.out.println("I'm Client && I closed!");}@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {// TODO Auto-generated method stubPlayerAccount_Entity ho = (PlayerAccount_Entity) message;System.out.println("Client message="+ho.getId()+ho.getName()+ho.getEmailAdress()+ho.getSex()); // session.write(ho);}}
3、HCoderFactory
package com.potter;import java.nio.charset.Charset;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolCodecFactory;import org.apache.mina.filter.codec.ProtocolDecoder;import org.apache.mina.filter.codec.ProtocolEncoder;public class HCoderFactory implements ProtocolCodecFactory { private final HEncoder encoder; private final HDecoder decoder; public HCoderFactory() {this(Charset.defaultCharset()); } public HCoderFactory(Charset charSet) { this.encoder = new HEncoder(charSet); this.decoder = new HDecoder(charSet); }@Overridepublic ProtocolDecoder getDecoder(IoSession arg0) throws Exception {// TODO Auto-generated method stubreturn decoder;}@Overridepublic ProtocolEncoder getEncoder(IoSession arg0) throws Exception {// TODO Auto-generated method stubreturn encoder;} }
4、HEncoder
package com.potter;import java.nio.charset.Charset;import java.nio.charset.CharsetEncoder;import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolEncoder;import org.apache.mina.filter.codec.ProtocolEncoderOutput;public class HEncoder implements ProtocolEncoder{private final Charset charset;public HEncoder(Charset charset) {this.charset = charset;}@Overridepublic void encode(IoSession session, Object message,ProtocolEncoderOutput out) throws Exception {CharsetEncoder ce = charset.newEncoder();PlayerAccount_Entity paEntity = (PlayerAccount_Entity) message;IoBuffer buffer = IoBuffer.allocate(100).setAutoExpand(true);buffer.putInt(paEntity.getId());buffer.putString(paEntity.getName(), ce);buffer.putString(paEntity.getEmailAdress(), ce);buffer.putInt(paEntity.getSex());buffer.flip();out.write(buffer);}@Overridepublic void dispose(IoSession session) throws Exception {// TODO Auto-generated method stub}}
5、HDecoder
package com.potter;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.CumulativeProtocolDecoder;import org.apache.mina.filter.codec.ProtocolDecoderOutput;public class HDecoder extends CumulativeProtocolDecoder {private final Charset charset;public HDecoder(Charset charset) {this.charset = charset;}@Overrideprotected boolean doDecode(IoSession arg0, IoBuffer message,ProtocolDecoderOutput arg2) throws Exception {CharsetDecoder cd = charset.newDecoder();int id=0;if(message.remaining()>=4){id=message.getInt();}String name = message.getString(cd);String emailAdress=message.getString(cd);int sex=0;if(message.remaining()>=4){sex=message.getInt();}PlayerAccount_Entity paEntity = new PlayerAccount_Entity(id,name,emailAdress,sex);arg2.write(paEntity);return true;}}
6、PlayerAccount_Entity
package com.potter;public class PlayerAccount_Entity{private int id; private String name; private String emailAdress; private int sex;// 0=man 1=womanpublic PlayerAccount_Entity(int id,String name,String emailAdress,int sex){this.id=id;this.name=name;this.emailAdress=emailAdress;this.sex=sex;} public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmailAdress() {return emailAdress;}public void setEmailAdress(String emailAdress) {this.emailAdress = emailAdress;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}}
二、Client
1、MinaClient
package com.potter;import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.transport.socket.nio.NioSocketConnector;public class MinaClient {private static final int bindPort=8899;public static void main(String[] args){// 创建一个socket连接 NioSocketConnector connector=new NioSocketConnector();// 获取过滤器链 DefaultIoFilterChainBuilder chain=connector.getFilterChain();ProtocolCodecFilter filter= new ProtocolCodecFilter(new HCoderFactory(Charset.forName("UTF-8"))); // 添加编码过滤器 处理乱码、编码问题 chain.addLast("objectFilter",filter);// 消息核心处理器 connector.setHandler(new MinaClientHanlder());// 设置链接超时时间 connector.setConnectTimeoutCheckInterval(30);// 连接服务器,知道端口、地址 ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",bindPort));// 等待连接创建完成 cf.awaitUninterruptibly();cf.getSession().getCloseFuture().awaitUninterruptibly();connector.dispose();}}
2、MinaClientHanlder
package com.potter;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;public class MinaClientHanlder extends IoHandlerAdapter{public void sessionOpened(IoSession session) throws Exception { PlayerAccount_Entity ho = new PlayerAccount_Entity(10,"Potter","potter@qq.com",0); session.write(ho); }@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {PlayerAccount_Entity ho = (PlayerAccount_Entity) message; System.out.println("Server Say:name:" + ho.getName());}@Overridepublic void sessionClosed(IoSession session) throws Exception {// TODO Auto-generated method stubsession.close();}}
好了,共同的就不穿了....
- Mina客户端Client和Server对象传输demo
- 【mina】mina传输对象
- Mina client客户端编写
- messenger,client和server通信Demo
- webservice delphi客户端 java服务器端 传输简单和复杂对象 小demo
- CXF开发服务端(Server)和客户端(Client)
- 使用Mina传输Java对象
- mina对象压缩后传输
- TCP网络传输客户端client
- 一个简单的ACE网络库Server和Client Demo
- Java Socket编程 多线程server和client通信demo
- Apache MINA实战之 对象传输
- Mina实现传输对象的编解码
- Apache MINA实战之 对象传输
- Mina二进制传输对象IoBuffer的使用
- Mina二进制传输对象IoBuffer的使用
- AS3 服务端、客户端协议路由简单写法 ---- AS3 Server、Client Router Demo
- 客户端和服务端程序 server.c and client.c
- 在android中ScrollView嵌套ScrollView
- 治疗Eclipse启动tomcat服务超时问题
- 再说php输出缓冲控制那些事
- TOMCAT配置SSL认证为HTTPS协议服务
- PHP源码加密
- Mina客户端Client和Server对象传输demo
- XBMC皮肤开发入门篇
- 杭电Hdu 1877 又一版 A+B
- 函数指针强制类型转换
- opengles 2D渲染性能
- java中的双缓冲技术
- linux/list.h (
- 百度搜索结果页面的参数 输入编码(ie)
- C++构造函数之深拷贝与浅拷贝