mina框架学习

去年用Mina框架做了网关,结果没做笔记,今年用Mina框架给忘记了,在这里记下笔记

服务器端:

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.filter.logging.LogLevel;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MianClient
{
	// 192.168.3.102
	private static final int PORT = 10010;

	public static void main(String[] args) throws IOException
	{
		IoAcceptor acceptor = new NioSocketAcceptor();
		LoggingFilter loggingFilter = new LoggingFilter();
		loggingFilter.setSessionClosedLogLevel(LogLevel.NONE);
		loggingFilter.setSessionCreatedLogLevel(LogLevel.DEBUG);
		loggingFilter.setSessionOpenedLogLevel(LogLevel.INFO);

		acceptor.getFilterChain().addLast("logger", loggingFilter);
		acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
		acceptor.setHandler(new ObjectMinaClientHandler());
		acceptor.getSessionConfig().setReadBufferSize( 2048 );  
        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );  
		acceptor.bind(new InetSocketAddress(PORT));
		System.out.println("计算器服务已启动,端口是" + PORT);
	}

}




package com.roland.controller.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ObjectMinaClientHandler extends IoHandlerAdapter
{
	private static Logger logger = LoggerFactory.getLogger(ObjectMinaClientHandler.class);

	// 当一个服务端连结进入时
	@Override
	public void sessionOpened(IoSession session) throws Exception
	{
		// session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);
		System.out.println("服务端链接了");
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception
	{
		System.out.println("发送消息");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception
	{
		System.out.println(session.getRemoteAddress().toString());
		System.out.println("创建");
	}

	// 当一个服务端关闭时
	@Override
	public void sessionClosed(IoSession session)
	{
		System.out.println("关闭");
	}

	// 空闲
	@Override
	public void sessionIdle(IoSession session, IdleStatus status) throws Exception
	{
		System.out.println("空闲");
	}

	public void exceptionCaught(IoSession session, Throwable cause)
	{
		System.out.println("异常啦");
		System.out.println(cause);
		session.close(true);
	}

	// 当服务器发送的消息到达时:
	@Override
	public void messageReceived(IoSession session, Object message)
	{
		System.out.println("我收到消息啦啦" + message.toString());
		// session.write(arg0);
	}
	

	

}


这是服务器端的,客户端的现在没做,后期补上


测试类


public class Test
{
	public static void main(String[] args)
	{
		try
		{
			Socket socket=new Socket("127.0.0.1",10010);
			BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
			PrintWriter os=new PrintWriter(socket.getOutputStream());
			BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String readline = "11\n";
			while(!readline.equals("bye"))
			{
				os.print(readline);
				os.flush();
				System.out.println("Client" + readline);
				System.out.println("Service" + is.readLine());
				readline = sin.readLine();
			}
			os.close();
			is.close();
			socket.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Mina是一个用于开发高性能、高可扩展性网络应用程序的Java框架。它提供了一种简单和灵活的方式来构建基于TCP/IP和UDP/IP协议的客户端和服务器端应用。 在学习Apache Mina时,首先需要了解它的基本概念和架构。Mina采用了NIO(非阻塞IO)的方式来实现网络通信。它的核心组件是IoService,它负责接收客户端的连接请求,并将请求分发给对应的I/O处理器进行处理。而I/O处理器则负责实际的数据读写和业务逻辑的处理。 在使用Mina进行开发时,我们首先需要创建一个IoAcceptor对象来监听指定的端口,并设置相应的处理器。当有客户端发起连接请求时,IoAcceptor会接收并处理这些请求。同时,我们还需要编写相应的I/O处理器来对接收到的数据进行处理和响应。 Mina还提供了一些便捷的工具类和接口,以简化开发过程。例如,可以使用IoBuffer来处理数据的读写,它类似于Java NIO中的ByteBuffer。同时,Mina还提供了一些过滤器,可以在数据传输的过程中进行一些常用的操作,比如加密、压缩、编解码等。 值得一提的是,Mina支持多种编解码协议,包括自定义的协议。它可以根据指定的编解码规则将数据进行解析和组装。这在实际应用中非常实用,因为经常会遇到需要对传输的数据进行编码和解码的情况。 总的来说,学习Apache Mina需要了解其基本概念、架构和核心组件,并掌握基本的开发流程和常用的工具类和接口。通过学习Mina,我们可以更加方便地开发出高性能、高可扩展性的网络应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值