簡單的Mina客戶端代碼MinaSimpleClient.java:
package com.bypay.mina.client; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.future.ConnectFuture; 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.nio.NioSocketConnector; import com.bypay.mina.handler.ClientTimerHandler; /** * Mina客戶端 * @author 唐延波 * @date 2015-1-20 * */ public class MinaSimpleClient { private static String HOSTNAME = "localhost"; private static int PORT = 9123; /** * @author 唐延波 * @throws InterruptedException * @date 2014-11-4 */ public static void main(String[] args) throws InterruptedException { NioSocketConnector connector = new NioSocketConnector(); //設置編碼解碼器 connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName("UTF-8")))); //設置Handler connector.setHandler(new ClientTimerHandler()); //獲取連接,該方法為異步執行 ConnectFuture future = connector.connect(new InetSocketAddress( HOSTNAME, PORT)); //等待連接建立 future.awaitUninterruptibly(); //獲取session IoSession session = future.getSession(); //等待session關閉 session.getCloseFuture().awaitUninterruptibly(); //釋放connector資源 //實際開發中,不要頻繁關閉connector,因為它是重量級資源,應該設計成單例或者連接池 connector.dispose(); } }
處理消息發送和消息接收
ClientTimerHandler.java代碼:
package com.bypay.mina.handler; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; /** * ClientHandler * * @author 唐延波 * @date 2015-1-20 * */ public class ClientTimerHandler extends IoHandlerAdapter { @Override public void sessionCreated(IoSession session) throws Exception { // session 創建時調用 session.write("test"); } @Override public void messageReceived(IoSession session, Object message) throws Exception { // 異步接收消息 String str = message.toString(); System.out.println("接收服務端消息:" + str); } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { // 出現異常 cause.printStackTrace(); session.close(true); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { // 心跳 System.out.println("客戶端ide:"); } }
