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();
		}
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章