1. 程式人生 > >Mina框架的學習第二節(伺服器端)

Mina框架的學習第二節(伺服器端)

伺服器端使用jar: mina-core-2.0.18.jar slf4j-api-1.7.25.jar

public class MinaServer {

    // 埠號,要求客戶端與伺服器端一致
    private static int PORT = 8282;

    public static void main(String[] args) {
        IoAcceptor acceptor = null;
        try {
            // 建立一個非阻塞的server端的Socket
            acceptor = new
NioSocketAcceptor(); // 設定過濾器(使用mina提供的文字換行符編解碼器) acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter((ProtocolCodecFactory) new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(), LineDelimiter.WINDOWS.getValue()))); // 設定讀取資料的換從區大小
acceptor.getSessionConfig().setReadBufferSize(2048); // 讀寫通道10秒內無操作進入空閒狀態 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 15); // 為接收器設定管理服務 acceptor.setHandler(new MinaServerHandler()); // 繫結埠 acceptor.bind(new
InetSocketAddress(PORT)); System.out.print("伺服器啟動成功... 埠號未:" + PORT); } catch (Exception e) { System.out.print("伺服器啟動異常..." + e.toString()); e.printStackTrace(); } } }
import java.util.Date;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class MinaServerHandler extends IoHandlerAdapter {

    // 從埠接受訊息,會響應此方法來對訊息進行處理
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        String msg = message.toString();
        if ("exit".equals(msg)) {
            // 如果客戶端發來exit,則關閉該連線
            session.closeNow();
        }
        // 向客戶端傳送訊息
        Date date = new Date();
        session.write(date);

        System.out.print("伺服器接受訊息成功...\n");
        super.messageReceived(session, message);
    }

    // 向客服端傳送訊息後會呼叫此方法
    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.print("伺服器傳送訊息成功...\n");
        super.messageSent(session, message);
    }

    // 關閉與客戶端的連線時會呼叫此方法
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        System.out.print("伺服器與客戶端斷開連線...\n");
        super.sessionClosed(session);
    }

    // 伺服器與客戶端建立連線
    @Override
    public void sessionCreated(IoSession session) throws Exception {
        System.out.print("\n伺服器與客戶端建立連線...\n");
        super.sessionCreated(session);
    }

    // 伺服器與客戶端連線開啟
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        System.out.print("伺服器與客戶端連線開啟...\n");
        super.sessionOpened(session);
    }

    // 伺服器狀態
    @Override
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.print("伺服器進入空閒狀態...\n");
        super.sessionIdle(session, status);
    }

    // 伺服器傳送異常態
    @Override
    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
        System.out.print("伺服器傳送異常...\n");
        super.exceptionCaught(session, cause);
    }
}

瀏覽器中輸入:http://localhost:8282 點選回車
這裡寫圖片描述

到此為止,伺服器端就完成了!!!!!!