您的位置:首页 > 编程语言 > Java开发

java通信框架mina的使用

2016-09-16 20:46 423 查看
什么事mina?

mina是基于nio开发出来的一个无阻塞高性能通信框架,能够处理socket无法解决的高并发问题。

mina的下载

http://mina.apache.org/

.将下载好的压缩包进行解压,将dist文件夹下的mina-core-2.0.14.jar文件和lib文件下slf4j-api-1.7.21.jar文件导入到你的web项目中

package com.example.server;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaServer {

public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//第一步 创建一个NioSocketAcceptor 对象
NioSocketAcceptor acceptor=new NioSocketAcceptor();
//第二步设置handler
acceptor.setHandler(new MyServerHandler());
//第三步,获取拦截器,发来的消息都需要通过拦截器拦截之后才能接收到
//添加一个拦截器对数据进行加解码TextLineCodecFactory()
acceptor.getFilterChain().addLast("codeFilter"
,new ProtocolCodecFilter(new TextLineCodecFactory()));;
//第四步,绑定端口号
acceptor.bind(new InetSocketAddress(9898));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

handler对象
package com.example.server;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class MyServerHandler extends IoHandlerAdapter {

//异常的处理
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
// TODO Auto-generated method stub
super.exceptionCaught(session, cause);
System.out.println("exceptionCaught");
}

@Override
public void inputClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.inputClosed(session);
}

@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// TODO Auto-generated method stub
super.messageReceived(session, message);
}

@Override
public void messageSent(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
super.messageSent(session, message);
}

@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionClosed(session);
}

@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionCreated(session);
}
// 这个方法是在服务器空闲状态的时候调用的
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
// TODO Auto-generated method stub
super.sessionIdle(session, status);
}

@Override
public void sessionOpened(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionOpened(session);
}

}

以上的代码基本上就可以代替原生的socket服务器端的写法了,至于接收端的用法可以用socket实现也可以用其他的方式实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: