import com.sun.swing.internal.plaf.metal.resources.metal; import com.sun.swing.internal.plaf.metal.resources.metal_sv; import org.apache.mina.core.RuntimeIoException; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.SocketConnector; import org.apache.mina.transport.socket.nio.NioSocketConnector; import java.net.ConnectException; import java.net.InetSocketAddress; public class MinaClient { public SocketConnector socketConnector; public static final int DEFAULT_CONNECT_TIMEOUT = 5; public static final String HOST = ”192.168.0.100″; public static final int PORT = 1100; public static IoSession ioSession; public MinaClient() { init(); } public void init() { socketConnector = new NioSocketConnector(); // socketConnector.getSessionConfig().setKeepAlive(true); socketConnector.setConnectTimeoutMillis(DEFAULT_CONNECT_TIMEOUT * 1000); socketConnector.getFilterChain().addLast(“codec”, new ProtocolCodecFilter(new TextLineCodecFactory())); ClientIoHandler ioHandler = new ClientIoHandler(); socketConnector.setHandler(ioHandler); InetSocketAddress addr = new InetSocketAddress(HOST, PORT); ConnectFuture cf = socketConnector.connect(addr); cf.awaitUninterruptibly(); ioSession = cf.getSession(); } public void sendMessage(final String msg) { try { if (ioSession != null) { if (ioSession.isConnected()) {// ioSession.write(msg);// System.out.println(“send message ” + msg); } else { reconnect(); } } } catch (RuntimeIoException e) { e.printStackTrace(); } } private void reconnect() { InetSocketAddress addr = new InetSocketAddress(HOST, PORT); ConnectFuture cf = socketConnector.connect(addr); cf.awaitUninterruptibly(); ioSession = cf.getSession(); } public static void main(String[] args) throws InterruptedException { MinaClient clent = new MinaClient(); for (int i = 0; i < 99999; i++) { Thread.sleep(2000); System.err.println(i); clent.sendMessage(“Hello World ” + i); } clent.getSocketConnector().dispose(); } public SocketConnector getSocketConnector() { return socketConnector; } public void setSocketConnector(SocketConnector socketConnector) { this.socketConnector = socketConnector; } } class ClientIoHandler extends IoHandlerAdapter { private void releaseSession(IoSession session) throws Exception { System.out.println(“releaseSession”); if (session.isConnected()) { session.close(true); } } @Override public void sessionOpened(IoSession session) throws Exception { System.out.println(“sessionOpened”); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println(“sessionClosed-c”); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { System.out.println(“sessionIdle”); try { releaseSession(session); } catch (RuntimeIoException e) { } } @Override public void messageReceived(IoSession session, Object message) throws Exception { System.out.println(“Receive Server message ” + message); } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { System.out.println(“exceptionCaught”); cause.printStackTrace(); releaseSession(session); } @Override public void messageSent(IoSession session, Object message) throws Exception { System.out.println(“messageSent”); super.messageSent(session, message); } }
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.SocketAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import java.net.InetSocketAddress; public class MinaServer { public void init() throws Exception{ SocketAcceptor acceptor = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors() + 1); //设置解析器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory())); acceptor.setHandler(new BexnHandler()); acceptor.bind(new InetSocketAddress(1100)); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,5); } public MinaServer() throws Exception { init(); } public static void main(String[] args) throws Exception { new MinaServer(); System.out.println("Server start"); } } class BexnHandler extends IoHandlerAdapter { @Override public void messageReceived(IoSession session, Object message) throws Exception { System.out.println("messageReceived " + message); super.messageReceived(session, message); session.write("messageReceived "+message); } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { if (session.isConnected()) { session.close(true); } } @Override public void messageSent(IoSession session, Object message) throws Exception { // session.close(); } @Override public void sessionClosed(IoSession session) throws Exception { super.sessionClosed(session); System.out.println("sessionClosed-s"); } @Override public void sessionCreated(IoSession session) throws Exception { } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { session.close(true); } @Override public void sessionOpened(IoSession session) throws Exception { super.sessionOpened(session); } }