一-通过Mina写一个简单的入门级服务端程序

1.Mina概述

    Mina是apache 开发的开源网络通信框架,基于javaNIO来实现。

2.需要的jar包

    commons-logging-1.1.1.jar    log4j-1.2.17.jar        mina-core-2.0.7.jar    slf4j-api-1.7.2.jar

3.编码解码

    应用程序:是java对象或者是基本数据类型,传到网络需要解码成二进制数据                                                                             网络:是二进制数据,需要解码成java对象或者基本数据类型

4.实例练习

    通过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.运行

启动服务端

一-通过Mina写一个简单的入门级服务端程序_第1张图片

使用telnet连接服务端

    telnet是windows操作系统下自带的可以远程登录的客户端

1.打开dos命令 输入 telnet 127.0.0.1  7080 回车 就可以连接

如果出现telnet不是命令的话,需要启用。打开控制面板--》程序--》打开或关闭windows功能--》启用telnet客户端


如果10秒内没有发送数据,会进入空闲状态,每10秒检测一次

一-通过Mina写一个简单的入门级服务端程序_第2张图片

客户端发送hello


客户端发送exit


第一次写博客,只是把每天所学到的和大家分享,希望大家多多批评指正,共同进步!!

    

你可能感兴趣的:(一-通过Mina写一个简单的入门级服务端程序)