Mina使用總結(三)MinaClient


簡單的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:");
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM