Mina第一个例子

实现用户广播的功能:

MyHttpServer.java:


import java.io.IOException;

import java.net.InetAddress;
import java.net.InetSocketAddress;

import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyHttpServer {

    private static int port = 8001;
    private static NioSocketAcceptor nioSocketAcceptor = null;
    private static Logger LOGGER = null;

    public static void init() {
        nioSocketAcceptor = new NioSocketAcceptor();
        LOGGER = LoggerFactory.getLogger(MyHttpServer.class);
    }

    public static void connection() {
        try {
            nioSocketAcceptor.bind(new InetSocketAddress(port));
            System.out.println("服务器已经启动!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void addLoggingFiter(){
        nioSocketAcceptor.getFilterChain().addLast("logging",new LoggingFilter());
    }

    public static void addTextFilter() {
        nioSocketAcceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
    }

    public void addSSLFilter() {
        
    }

    public static void addMyHandler() {
        nioSocketAcceptor.setHandler(new myHandler());
    }

    public static void main(String[] args) {
        init();
        addLoggingFiter();
        addTextFilter();
        addMyHandler();
        connection();
    }
}



myHandler.java:

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class myHandler extends IoHandlerAdapter {

    private static Logger LOGGING = null;
    private static String ID = "id + ";
    private static int id = 0;

    private Set<IoSession> sessions = Collections
            .synchronizedSet(new HashSet<IoSession>());
    private Set<String> users = Collections
            .synchronizedSet(new HashSet<String>());

    public myHandler() {
        LOGGING = LoggerFactory.getLogger(myHandler.class);
    }

    public void exceptionCaught(IoSession session, Throwable cause) {
        LOGGING.warn(cause.getMessage(), cause);
    }

    public void sessionOpened(IoSession session) {

    }

    public void messageReceived(IoSession session, Object message) {

        String msg = (String) message;

        if (msg.equals("login in")) {

            if (sessions.contains(session) == false) {
                if (users.contains(ID + id)) {
                    session.write("The ID is used!");
                } else {
                    session.write("Logging is successful!");
                    users.add(ID + id);
                    session.setAttribute("user", ID + id);
                    sessions.add(session);
                    session.write("You are successful loggin!Thank you^-^");
                    id++;
                }
            }
            else{
                session.write("you are longging!");
            }
            
            session.write("当前存在的用户ID有:");
            for(String s:users){
                session.write(s);
            }
            
            

        }

        else if (msg.equals(commuciateStatu.nowStatu("quit"))) {
            sessions.remove(session);
            users.remove(ID + id);
            session.close();
        }

        else {
            for (IoSession i : sessions) {
                if (i.isClosing() == false) {
                    i.write(message);
                }
            }
        }
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值