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