zoukankan      html  css  js  c++  java
  • Apache MINA 基于UDP实例

    1、基于UDP服务端

    server

    NioDatagramAcceptor acceptor = new NioDatagramAcceptor();
    acceptor.setHandler(new MemoryMonitorHandler(this));
    DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
    chain.addLast("logger", new LoggingFilter());
    DatagramSessionConfig dcfg = acceptor.getSessionConfig();
    dcfg.setReuseAddress(true);acceptor.bind(new InetSocketAddress(PORT));
    @Override
    public void sessionCreated(IoSession session) throws Exception {
        SocketAddress remoteAddress = session.getRemoteAddress();
        server.addClient(remoteAddress);
    }
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        if (message instanceof IoBuffer) {
            IoBuffer buffer = (IoBuffer) message;
            SocketAddress remoteAddress = session.getRemoteAddress();
            server.recvUpdate(remoteAddress, buffer.getLong());
        }
     }
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        System.out.println("Session closed...");
        SocketAddress remoteAddress = session.getRemoteAddress();
        server.removeClient(remoteAddress);
    }

    client:

    connector = new NioDatagramConnector();
    connector.setHandler( this );
    ConnectFuture connFuture = connector.connect( new InetSocketAddress("localhost", MemoryMonitor.PORT ));
    connFuture.addListener( new IoFutureListener(){
                public void operationComplete(IoFuture future) {
                    ConnectFuture connFuture = (ConnectFuture)future;
                    if( connFuture.isConnected() ){
                        session = future.getSession();
                        try {
                            sendData();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    } else {
                        log.error("Not connected...exiting");
                    }
                }
            });
    private void sendData() throws InterruptedException {
        for (int i = 0; i < 30; i++) {
            long free = Runtime.getRuntime().freeMemory();
            IoBuffer buffer = IoBuffer.allocate(8);
            buffer.putLong(free);
            buffer.flip();
            session.write(buffer);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                throw new InterruptedException(e.getMessage());
            }
        }
    }
  • 相关阅读:
    [Evolution in aciton] C#1.1=>2.0=>3.0 [Querying Collections]
    动态操作.Config文件
    设计模式代理模式(Proxy Model)
    Linq Coding Part Five (Join之内部联接查询)
    Linq Coding Part Four[Concat应用]
    [转]领域模型管理与AOP
    08端午节,休闲一下吧,来上游戏
    有关于ViewState的二种压缩方式
    AddOutParameter引发类型问题
    Linq Coding Part Two[标准查询运算符]
  • 原文地址:https://www.cnblogs.com/quyongjin/p/3128277.html
Copyright © 2011-2022 走看看