- 首先去官网下载相关jar包:http://mina.apache.org/
解压:这里演示的主要引用两个包:
dist/mina-core-2.0.9.jar —mina核心包
lib/slf4j-api-1.7.7.jar —mina依赖的日志包 - 新建java工程,创建mina服务器端
public class MinaService {
public static void main(String[] args) {
NioSocketAcceptor acceptor ;
try {
//1.创建NioSocketAcceptor
acceptor = new NioSocketAcceptor();
//2. 设置handler
acceptor.setHandler(new ServiceHandler());
//3. 设置拦截器 : TextLineCodecFactory---这是默认的文本拦截器
acceptor.getFilterChain().addLast("text", new ProtocolCodecFilter(new TextLineCodecFactory()));
//设置,如果客户端在5s内没有连接的话,会进入空闲状态,调用sessionIdle()方法
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);
//4. 绑定端口
acceptor.bind(new InetSocketAddress(8888));
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 创建IoHandlerAdapter的实现类
/**
* 创建一个处理类
* @author johnny
*
* 2015年4月22日 下午8:56:18
*/
public class ServiceHandler extends IoHandlerAdapter {
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("sessionCreated");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("sessionOpened");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("sessionClosed");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
System.out.println("sessionIdle --->" + status);
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
System.out.println("exceptionCaught");
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String s = (String) message;
System.out.println("messageReceived: " + s);
//发送数据给客户端
session.write("Service replay : " + s);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
String s = (String) message;
System.out.println("messageSent: " + s);
}
@Override
public void inputClosed(IoSession session) throws Exception {
System.out.println("inputClosed");
}
}
经过上面3部,mina算是可以接受客户端的通信了,当然更高级的应用后面再写。
4. 下面写一个客户端去测试
public class SocketClient {
BufferedReader socketReader;
public static void main(String[] args) {
SocketClient client = new SocketClient();
client.start();
}
private void start() {
Socket socket = null;
BufferedReader reader = null;
BufferedWriter writer = null;
try {
socket = new Socket("127.0.0.1", 8888);
//从键盘中接受输入
reader = new BufferedReader(new InputStreamReader(System.in));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
receiverMsgListener(socketReader);
String temp = null;
while (!(temp = reader.readLine()).equals("bye")) {
// System.out.println(temp + "\n");
writer.write(temp + "\n");
writer.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
reader.close();
writer.close();
socketReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void receiverMsgListener(final BufferedReader socketReader) {
new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println(socketReader.readLine());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
}
}
以上就是mina的初体验!这是一种长连接方式。