首页

分享基于mina网路通信框架实现客户服务端简单即时消息代码示例(mina实践入门案例)

标签:mina示例demo,MINA入门代码,消息通信,简单聊天示例     发布时间:2018-10-25   

一、前言

基于mina框架依赖库及版本包(apache-mina-2.0.4-bin.zip及更多版本,依赖库lib目录,版本包dist目录)实现客户服务端即时消息通信聊天,代码示例定义服务端入口启动MinaMessageServer类(创建通信socket套接字)、消息会话内容处理SessionMessageHandler类(实现消息会话处理逻辑)。

二、代码说明

1. MinaMessageServer类 - 启动main入口方法

package mina;@b@@b@import java.io.IOException;@b@import java.net.InetSocketAddress;@b@@b@import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;@b@import org.apache.mina.core.service.IoAcceptor;@b@import org.apache.mina.filter.codec.ProtocolCodecFilter;@b@import org.apache.mina.filter.codec.textline.TextLineCodecFactory;@b@import org.apache.mina.transport.socket.nio.NioSocketAcceptor;@b@@b@public class MinaMessageServer {@b@	@b@	private static final int PORT = 9999;// 定义监听端口@b@@b@	public static void main(String[] args) throws IOException {@b@		@b@		// 创建一个非阻塞的Server端socket,用NIO@b@		IoAcceptor acceptor = new NioSocketAcceptor();@b@		@b@		// 创建接受数据的过滤器@b@		DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();@b@		@b@		// 设定这个过滤器将一行一行的读取数据@b@		chain.addLast("codec", new ProtocolCodecFilter(@b@				new TextLineCodecFactory()));// 指定编码过滤器@b@		@b@		// 指定业务逻辑处理器@b@		acceptor.setHandler(new SessionMessageHandler());@b@		@b@		// 设置端口号@b@		acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));@b@		acceptor.bind(); // 启动监听@b@		@b@		System.out.println("Mina Server消息服务已启动,监听端口:" + PORT);@b@	}@b@	@b@}

2. SessionMessageHandler类 - 消息会话处理

package mina;@b@@b@import java.text.SimpleDateFormat;@b@import java.util.Date;@b@@b@import org.apache.mina.core.service.IoHandlerAdapter;@b@import org.apache.mina.core.session.IoSession;@b@@b@public class SessionMessageHandler extends IoHandlerAdapter {@b@	@b@	// 当一个客户端连接进入时@b@	@Override@b@	public void sessionOpened(IoSession session) throws Exception {@b@		System.out.println("client【"+session.getId()+"】 接入会话,IP:" + session.getRemoteAddress());@b@	}@b@@b@	// 当客户端发送消息到达时@b@	@Override@b@	public void messageReceived(IoSession session, Object message)@b@			throws Exception {@b@		String clientMessage = message.toString();@b@		System.out.println("收到client【"+session.getId()+"】发来的消息:" + clientMessage);@b@		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd mm:hh:ss");@b@		@b@		session.write(sdf.format( new Date())+"已经收到您的消息!");// 返回当前时间的字符串@b@		System.out.println("已给client【"+session.getId()+"】回复消息");@b@	}@b@@b@	// 当一个客户端连接关闭时@b@	@Override@b@	public void sessionClosed(IoSession session) throws Exception {@b@		System.out.println("client【"+session.getId()+"】 结束会话");@b@	}@b@}

3. 启动测试通信,首先启动MinaMessageServer类, 后台打印启动日志

Mina Server消息服务已启动,监听端口:9999

客户端通过telnet命令模拟给服务端发送消息,操作如下

分享基于mina网路通信框架实现客户服务端简单即时消息代码示例(mina实践入门案例)

客户端窗口发送消息(“who?”、“hello”),服务端自动回复“已经收到您的消息!”

分享基于mina网路通信框架实现客户服务端简单即时消息代码示例(mina实践入门案例)

@b@
<<热门下载>>