导入jar包
导入Mina的相关jar包,了解的比较少,所以这里只用了核心的一个,mina-core和slf4j-api
Mina的处理流程
Mina框架就是对Java的NIO的封装,处理层次大约为IoService 、IoHandler、IoProcess,IoFilter
IOservice层次
实现了java nio的serversocketchennel
服务器代码如下
主线程,代码实现注释讲解
NioSocketAcceptor acceptor = new NioSocketAcceptor();
//设定filter以对象为单位
//DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
//chain.addLast("objectFilter",filter);
acceptor.setHandler(new MyServerHandler());
acceptor.getFilterChain().addLast("code", new ProtocolCodecFilter(new TextLineCodecFactory()));
acceptor.bind(new InetSocketAddress(8888));
if(acceptor!=null){System.out.println("Is Begin");}
处理线程
public class MyServerHandler extends IoHandlerAdapter{
private static Map<String,IoSession> sessionmap = new HashMap<String,IoSession>();
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
super.exceptionCaught(session, cause);
}
@Override
public void inputClosed(IoSession session) throws Exception {
super.inputClosed(session);
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
message messa = (message)message;
if(!sessionmap.containsKey(messa.getFrom()))
{
sessionmap.put(messa.getFrom(), session);
}
if(!sessionmap.containsKey(messa.getTo()))
{
System.out.print("he maybe not here,but i cant tell she");
}
sessionmap.get(messa.getTo()).write(messa);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("Message is sent");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("Clo Session");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("Create Session");
//想在创建连接时发送好友列表
//session.write(sessionmap.keySet());
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
super.sessionIdle(session, status);
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("Open Session");
sessionmap.put(((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress(), session);
session.write("sdasdas"+((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress());
}
}