Mina2.0
jar:
mina-core-2.0.4;
slf4j-api-1.6.4;
slf44-log4j12-1.6.4;
fastjson-1.1.6;
首先是Server类
package author.zhaolei.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import author.zhaolei.handler.ServerHandler;
public class MainServer {
private int PORT = 9999;
public MainServer() throws IOException{
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new ServerHandler());
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.setDefaultLocalAddress(new InetSocketAddress("localhost", PORT));
acceptor.bind();
}
public static void main(String[] args) throws IOException {
new MainServer();
System.out.println("服务端启动!");
}
}
然后是ServerHandler
package author.zhaolei.handler;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import author.zhaolei.jsonBean.Classes;
import author.zhaolei.jsonBean.Student;
import com.alibaba.fastjson.JSON;
public class ServerHandler extends IoHandlerAdapter{
private static AtomicInteger count = new AtomicInteger(0);
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
cause.printStackTrace();
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("客户端IP" + session.getRemoteAddress());
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("服务器接收到信息:" + count.incrementAndGet() + " " + message.toString());
Classes c = JSON.parseObject(message.toString(),Classes.class);
List<Student> list = c.getList();
for(Student s : list){
s.setSorce(s.getSorce()+10);
}
String str = JSON.toJSONString(c);
System.out.println("转化后的 json " + str);
session.write("message : " + str);
}
}
客户端Client类
package author.zhaolei.client;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.concurrent.TimeUnit;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import author.zhaolei.handler.ClientHandler;
public class MainClient {
private String IP = "127.0.0.1";
private int PORT = 9999;
public MainClient(){
IoConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.setHandler(new ClientHandler());
ConnectFuture cf = connector.connect(new InetSocketAddress(IP, PORT));
if (cf.awaitUninterruptibly(5, TimeUnit.SECONDS)) {
}
cf.getSession().write("{\"id\":1,\"list\":[{\"id\":1,\"name\":\"zhaolei\",\"sorce\":70},{\"id\":2,\"name\":\"zl\",\"sorce\":60}]}");
}
public static void main(String[] args) {
new MainClient();
System.out.println("客户端启动!");
}
}
客户端Handler类
package author.zhaolei.handler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class ClientHandler extends IoHandlerAdapter{
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
cause.printStackTrace();
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("客户端接收到信息" + message.toString());
//session.write(" messsage : " + message.toString());
}
}
Decode Encode 要处理对数据的加密和解密 压缩解压缩 咋不公布。 可以自己实现压缩用gzip 。json的压缩率还是不够高。