MinaDemo

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的压缩率还是不够高。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值