天下之事,必先处之难,而后易之。

Mina通信框架学习初步

1、Mina通信整体框架



2、Mina通信流程

3、Mina示例

3.1、客户端处理器

package com.boonya.mina.simple;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * 客户端 IoHandler
 */

public class MyClinetIoHandler extends IoHandlerAdapter {

 private final static Logger logger = LoggerFactory.getLogger(MyClinetIoHandler.class);

 private final String values;

 public MyClinetIoHandler(String values) {
  this.values = values;
 }

 @Override
 public void sessionOpened(IoSession session) throws Exception {
  session.write(values);
  logger.debug("MyClinetIoHandler sessionOpened---------");
 }

}

package com.boonya.mina.simple;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
 * mina框架中客户端与服务器端的执行流程一致,
 * 唯一的区别是: IoService的client实现是IoConnetor,server端是IoAcceptor
 */

public class MyClient {

	public static void main(String[] args) {
		// 1.创建ioservice
		IoConnector connector = new NioSocketConnector();
		connector.setConnectTimeoutMillis(30000);

		// 2.注册过滤器
		connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset
		    .forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));

		// 3注册iohandler,到ioserivce

		connector.setHandler(new MyClinetIoHandler("hello!\r\nworld!"));
		// 4.绑定套接字,建立连接
		connector.connect(new InetSocketAddress("localhost", 1000));

	}

}

3.2、客户端处理

package com.boonya.mina.simple;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * IoHandler处理客户端的数据
 */
public class MyServerIoHandler extends IoHandlerAdapter {

	private final static Logger logs = LoggerFactory.getLogger(MyServerIoHandler.class);

	public void messageReceived(IoSession session, Object message)	throws Exception {

		String str = message.toString();

		logs.info("the message received is[" + str + "]");

		System.out.println("the message received is[" + str + "]");

		if (str.endsWith("quit")){
			session.close(true);
			return;

		}

	}

}
package com.boonya.mina.simple;
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.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MyServer {

	public static void main(String[] args) throws IOException {

		// 1.编写ioservice
		IoAcceptor acceptor = new NioSocketAcceptor();
		acceptor.getSessionConfig().setReadBufferSize(2048);
		// 读写通道在10秒内无任何操作进入空闲状态
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

		// 2.编写过滤器,
		// 通过TextLineCodeFactory编解码工厂对字符串进行编解码处理
		acceptor.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
						LineDelimiter.WINDOWS.getValue())));// 以换行符为标识的数据

		// 3.注册iohandler到ioservice
		acceptor.setHandler(new MyServerIoHandler());

		// 4绑定套接字
		acceptor.bind(new InetSocketAddress(1000));

	}

}





 

 

posted @ 2024-03-25 21:18  boonya  阅读(38)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。