Java Mina 基于NIO的通讯框架——编写服务器端

导入jar包

导入Mina的相关jar包,了解的比较少,所以这里只用了核心的一个,mina-core和slf4j-api

Mina的处理流程

Mina框架就是对Java的NIO的封装,处理层次大约为IoService 、IoHandler、IoProcess,IoFilter

IOservice层次

实现了java nio的serversocketchennel

服务器代码如下

主线程,代码实现注释讲解

NioSocketAcceptor acceptor = new NioSocketAcceptor();
//设定filter以对象为单位
//DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
//chain.addLast("objectFilter",filter);
acceptor.setHandler(new MyServerHandler());
acceptor.getFilterChain().addLast("code", new ProtocolCodecFilter(new TextLineCodecFactory()));
acceptor.bind(new InetSocketAddress(8888));
if(acceptor!=null){System.out.println("Is Begin");}


处理线程

public class MyServerHandler extends IoHandlerAdapter{
	private static Map<String,IoSession> sessionmap = new HashMap<String,IoSession>();
	@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
		super.exceptionCaught(session, cause);
	}

	@Override
	public void inputClosed(IoSession session) throws Exception {
		super.inputClosed(session);
	}

	@Override
	public void messageReceived(IoSession session, Object message) throws Exception {
		message messa = (message)message;
		if(!sessionmap.containsKey(messa.getFrom()))
		{
			sessionmap.put(messa.getFrom(), session);
		}
		if(!sessionmap.containsKey(messa.getTo()))
		{
			System.out.print("he maybe not here,but i cant tell she");
		}
		sessionmap.get(messa.getTo()).write(messa);
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		System.out.println("Message is sent");
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("Clo Session");
	
		
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		System.out.println("Create Session");
		//想在创建连接时发送好友列表
		//session.write(sessionmap.keySet());
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
		super.sessionIdle(session, status);
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("Open Session");
		sessionmap.put(((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress(), session);
		session.write("sdasdas"+((InetSocketAddress)session.getRemoteAddress()).getAddress().getHostAddress());
	}
	
}


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值