//包含四个类,客户端两个+服务器两个 //LoginClient.java,LoginClientHandler.java,LoginServer.java,LoginServerHandler.java //login客户端代码 package com.mina.day3; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.log4j.Logger; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.session.IoSession; 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; public class LoginClient { private static Logger logger = Logger.getLogger(LoginClient.class); private static String HOST = "127.0.0.1"; private static int PORT = 3005; public static void main(String[] args) { IoConnector connector = new NioSocketConnector(); connector.setConnectTimeoutMillis(3000); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter( new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(), LineDelimiter.WINDOWS.getValue()) )); connector.setHandler(new LoginClientHandler()); IoSession session = null; try { ConnectFuture future = connector.connect(new InetSocketAddress(HOST, PORT)); future.awaitUninterruptibly(); session = future.getSession(); session.write("admin,3"); } catch (Exception e) { logger.error("connecting error...", e); } session.getCloseFuture().awaitUninterruptibly(); connector.dispose(); } } //客户端处理器代码 package com.mina.day3; import org.apache.log4j.Logger; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class LoginClientHandler extends IoHandlerAdapter { private static Logger logger = Logger.getLogger(LoginClientHandler.class); @Override public void messageReceived(IoSession session, Object message) throws Exception { // message from server String msgFServer = message.toString(); logger.info("client received msg = " + msgFServer); } } //服务器端LoginServer.java package com.mina.day3; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.log4j.Logger; 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 LoginServer { private static Logger logger = Logger.getLogger(LoginServer.class); private static int PORT = 3005; public static void main(String[] args) { IoAcceptor acceptor = null; try { acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter( new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(), LineDelimiter.WINDOWS.getValue()) )); acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); acceptor.setHandler(new LoginServerHandler()); acceptor.bind(new InetSocketAddress(PORT)); logger.info("server startup ok,port = "+PORT); } catch (Exception e) { logger.error("server startup error...", e); e.printStackTrace(); } } } //服务器处理器代码 package com.mina.day3; import org.apache.log4j.Logger; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; public class LoginServerHandler extends IoHandlerAdapter { public static Logger logger = Logger.getLogger(LoginServerHandler.class); @Override public void messageReceived(IoSession session, Object message) throws Exception { String resultMsg = message.toString(); logger.info("server received msg = "+resultMsg); if ("bye".equals(resultMsg)) { session.close(true); } //简单模拟业务逻辑处理 String[] userInfo = resultMsg.split(","); String username = userInfo[0]; String password = userInfo[1]; if (username.equals("admin") && password.equals("3")) { session.write("login success..."); } else { session.write("login error..."); } } @Override public void messageSent(IoSession session, Object message) throws Exception { // longlived connection logger.info("message sent success..."); } }