Mina的服务器

Posted wangjianly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mina的服务器相关的知识,希望对你有一定的参考价值。

(一)

package testMina;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
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 MinaSimpleServer {
	private static final int PORT = 9123;
	private static final String HOST = "localhost";

	public static void main(String[] args) {
		// 接收者
		IoAcceptor acceptor = new NioSocketAcceptor();
		// 设置编码器
		acceptor.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
		// 设置Handler
		acceptor.setHandler(new TimeServerHandler());
		// 心跳
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 6);
		// 绑定端口,启动服务,并开始处理远程客户端请求
		try {
			acceptor.bind(new InetSocketAddress(HOST, PORT));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("服务端启动成功");
	}
}

 

(二)

package testMina;

import java.sql.Timestamp;
import java.util.Date;

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

public class TimeServerHandler extends IoHandlerAdapter {
	private int count = 0;

	// 由底层决定是否创建一个session
	@Override
	public void sessionCreated(IoSession session) {
		System.out.println("新的连接");
	}

	// 创建了session 后会回调sessionOpened
	public void sessionOpened(IoSession session) throws Exception {
		count++;
		System.out.println("第 " + count + " 个 client 登陆!address: : " + session.getRemoteAddress());
	}

	// 有异常时执行方法
	@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
		System.out.println("客户端断了!!!");
		//cause.printStackTrace();
	}
	
	//接收消息时调用
	@Override
	public void messageReceived(IoSession session, Object message) throws Exception {
		String str = message.toString();
		System.out.println("接受到的数据是:" + message);
		if (str.trim().equalsIgnoreCase("quit")) {
			session.close();
			return;
		}
		Date date = new Date();
		// 向输出流中写东西
		session.write(date.toString());
		System.out.println("Message written...");
	}
	// session 关闭调用
	@Override
	public void sessionClosed(IoSession session) {
		System.out.println("one client disconnect");
		session.close(session.isConnected());
	}

	// 当连接空闲时触发此方法.
	@Override
	public void sessionIdle(IoSession session, IdleStatus status) {
		System.out.println("【时间】:"+new Timestamp(System.currentTimeMillis())+"连接空闲(心跳机制)");
	}

	// 当信息已经传送给客户端后触发此方法.
	@Override
	public void messageSent(IoSession session, Object message) {
		System.out.println("信息已经传送给客户端");
	}
}

 

以上是关于Mina的服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用Apache MINA框架搭建服务端

Mina代码解析

NIO框架之MINA源代码解析:mina核心引擎

Mina自定义协议简单实现

Mina文档 02-基础

Mina的服务器