java web----MINA框架使用


前期准備

1、下載

http://mina.apache.org/

2、將依賴包添加到工程目錄下(在工程目錄下創建libs(directory目錄))

3、將 slf4j-api-1.7.26.jar 和 mina-core-2.0.21.jar 依賴包添加到libs目錄下

4、給這兩個文件和工程綁定關系,方法:選中兩個文件,右擊,選擇 Add as Library

 

代碼實現

 服務端

 

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoHandlerAdapter;
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.io.*;
import java.net.InetSocketAddress;

public class Server{
    public static void main(String[] args) {
        //創建一個非堵塞的Server(Socker),[NIO模式]
        SocketAcceptor acceptor = new NioSocketAcceptor();
        //創建一個過濾器對象
        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();

        //設定一個過濾器,一行一行的讀取數據(/r/n)
        //chain.addLast("myChain",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));//表示傳數據的數據是一個對象;
        chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
        //設置服務器的消息處理器
        acceptor.setHandler(new MinaServerHandle());
        int port = 8080; //服務器的端口號
        try {
            //綁定端口,並且啟動服務器,立刻返回,不會堵塞
            acceptor.bind(new InetSocketAddress(port));

        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("MINA服務器已經開啟,端口號:"+port);
    }
}

//服務器端的消息處理器
class MinaServerHandle extends IoHandlerAdapter {
    //會話開始
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println(session.getRemoteAddress()+"已連接");//獲取客戶端連接的ip地址
    }
    //會話結束
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        System.out.println("會話結束");
    }

    //接受消息
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        super.messageReceived(session, message);
        System.out.println(message); //接受消息
        session.write("hellow");
    }
}

 

  

 

客戶端1

1.可以使用window自帶的telnet工具和服務器連接,並進行通信

首先打開Telnet,在控制面板中,打開程序和功能,在打開 (打開或關閉windows 功能),選中Telnet 客戶端 ,確定

測試:控制台上輸入  telnet localhost(服務器的ip地址)   8080(服務器的端口) ,即可

客戶端2

2.自己寫客戶端程序

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoHandlerAdapter;
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 java.net.InetSocketAddress;
import java.util.Scanner;

public class client {
    public static void main(String[] args) {
        NioSocketConnector conn = new NioSocketConnector();
        DefaultIoFilterChainBuilder chain = conn.getFilterChain();
        chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
        conn.setHandler(new MinaClientHandle());
        conn.setConnectTimeoutCheckInterval(3000);

        //連接服務器
        ConnectFuture cf = conn.connect(new InetSocketAddress("localhost", 8080));
        cf.awaitUninterruptibly(); //等待連接成功;
        Scanner input = new Scanner(System.in);
        while (true){
            System.out.println("輸入消息");
            String msg = input.nextLine();
            cf.getSession().write(msg);
        }
        //等待服務器關閉連接
        //cf.getSession().getCloseFuture().awaitUninterruptibly();
        //conn.dispose();
    }
}
class MinaClientHandle extends IoHandlerAdapter {
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("已連接");
    }
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("已關閉");
    }
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        super.messageReceived(session, message);
        System.out.println("服務器返回消息:"+message);
    }
}

  


免責聲明!

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



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