Mina是apache 开发的开源的网络通信框架,基于javaNIO来实现。
commons-logging-1.1.1.jar log4j-1.2.17.jar mina-core-2.0.7.jar slf4j-api-1.7.2.jar
应用程序:是java对象或者是基本数据类型,传到网络需要解码成二进制数据 网络:是二进制数据,需要解码成java对象或者基本数据类型
通过Mina来创建一个服务端程序,用于监听客户端的连接,并接收客户端传来的数据,如果接收的数据是exit,服务端关闭,客户端用telent来模拟。以下为代码:
1.先建立一个MinaServer类
public class MinaServer {
static int port = 7080;//端口号
static IoAcceptor accept = null;
public static void main(String[] args) {
try{
accept = new NioSocketAcceptor();
//设置编码过滤器
accept.getFilterChain().addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory(
Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
//设置缓冲区的大小
accept.getSessionConfig().setReadBufferSize(1024);
//设置空闲时间 10s
accept.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
//设置Handler,真正处理的类
accept.setHandler(new MyHandler());
//绑定端口号
accept.bind(new InetSocketAddress(port));
//监听
System.out.println("Server->"+port);
}catch(Exception e){
e.printStackTrace();
}
}
}
2.自定义的处理类
(1)自定义类需要继承IoHandlerAdapter
(2)自定义类实现父类的所有方法
鼠标右击--》source--》override/Implements Methods
public class MyHandler extends IoHandlerAdapter{
@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 msg = (String) message;
System.out.println("接收到数据:"+msg);
if(msg.equals("exit")){
session.close();
}
//发送的数据
Date date = new Date();
session.write(date);
}
@Override
/**
* 发送数据
*/
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("messageSent");
}
@Override
/**
* session关闭的方法
*/
public void sessionClosed(IoSession session) throws Exception {
System.out.println("sessionClosed");
}
@Override
/**
* session创建的方法
*/
public void sessionCreated(IoSession session) throws Exception {
System.out.println("sessionCreated");
}
@Override
/**
* 空闲状态
*/
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("sessionIdle");
}
@Override
/**
* 打开session
*/
public void sessionOpened(IoSession session) throws Exception {
System.out.println("sessionOpened");
}
}
3.运行
启动服务端
使用telnet连接服务端
telnet是windows操作系统下自带的可以远程登录的客户端
1.打开dos命令 输入 telnet 127.0.0.1 7080 回车 就可以连接
如果出现telnet不是命令的话,需要启用。打开控制面板--》程序--》打开或关闭windows功能--》启用telnet客户端
如果10秒内没有发送数据,会进入空闲状态,每10秒检测一次
客户端发送hello
客户端发送exit
第一次写博客,只是把每天所学到的和大家分享,希望大家多多批评指正,共同进步!!