MINA2.0用户手册中文版--第二章 第五节 UDP客户端实例

这一节我们将看一下上一节中提到的UDP服务器的客户端代码:

实现一个客户端需要做如下:
  • 创建一个Socket并连接到服务器
  • 设置操作处理器IoHandler
  • 收集可用内存
  • 发送数据到服务器
我们来看下包 org.apache.mina.example.udp.client中的代码MemMonClient.java,前面几行代码很简洁:
connector = new NioDatagramConnector();
connector.setHandler( this );
ConnectFuture connFuture = connector.connect( new InetSocketAddress("localhost", MemoryMonitor.PORT ));

这里创建了一个连接器NioDatagramConnector,设置了处理程序,并且连接到了指定的服务器。这里有个小问题,就是你必须设置对象InetSocketAddress中的主机地址,否则似乎无法正常工作。这个例子主要是在Windows XP上编写和测试的,在其他系统上可能会有所不同。接下来,我们就等待确认客户端已连接到了服务器上,一旦确认连接成功,我们就可以向服务器传送数据了,下面就是写数据的代码了:

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");
                }
            }
        });

此段代码添加了一个监听器到ConnectorFuture对象,当收到一个客户端已经连接上的回调之后,就可以开始写数据到服务器了,写操作是通过方法sendDate()来完成的,以下就是该方法的代码:

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());
        }
    }
}

该方法每隔一秒就将客户端程序空余内存数发送给服务器,共进行30次。程序分配了一个足够大的IoBuffer来存放一个长整型变量,之后将空余内存数放入该缓冲区,然后将该缓冲区的当前位置通过方法flip()重置,最后传送到服务器端。

UDP客户端就完成了。

你可能感兴趣的:(MINA2.0用户手册中文版--第二章 第五节 UDP客户端实例)