zoukankan      html  css  js  c++  java
  • TCP异步IO_服务端_测试

    1、测试代码来自于 JDK7 AIO初体验 http://www.iteye.com/topic/1113611

      1.1、

    package aio;
    
    import java.net.InetSocketAddress;
    import java.nio.*;
    import java.nio.channels.*;
    import java.util.concurrent.*;
    
    public class TaioServer
    {
        public final static int PORT = 9888;
        private AsynchronousServerSocketChannel FasyncServer;
    
        public TaioServer() throws Exception
        {
            FasyncServer = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(PORT));
        }
    
        // Future方式
        public void StartWithFuture() throws Exception
        {
            System.out.println("Server listen on " + PORT);
            Future<AsynchronousSocketChannel> future = FasyncServer.accept();
            AsynchronousSocketChannel socket = future.get();
            ByteBuffer readBuf = ByteBuffer.allocate(1024);
            readBuf.clear();
            socket.read(readBuf).get(100, TimeUnit.SECONDS);
            readBuf.flip();
            System.out.printf("received message:" + new String(readBuf.array()));
            System.out.println(Thread.currentThread().getName());
        }
        
        // CompletionHandler方式
        public void StartWithCompletionHandler() throws Exception
        {
            System.out.println("Server listen on " + PORT);
            //注册事件和事件完成后的处理器
            FasyncServer.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>()
                {
                    final ByteBuffer buffer = ByteBuffer.allocate(1024);
                    
                    public void completed(AsynchronousSocketChannel _rstAsyncSocketChannel,  Object _attachment)
                    {
                        System.out.println(Thread.currentThread().getName());
                        System.out.println("start");
                        try
                        {
                            buffer.clear();
                            System.out.println("TimeUnit.SECONDS : "+TimeUnit.SECONDS);
                            int iRst = _rstAsyncSocketChannel.read(buffer).get(100, TimeUnit.SECONDS);
                            System.out.println("iRst : "+iRst);
                            buffer.put(iRst, (byte)0);
                            buffer.flip();
                            System.out.println("received message: "+ new String(buffer.array(), 0, iRst));
                        } catch (InterruptedException | ExecutionException e) {
                            //System.out.println(e.toString());
                            e.printStackTrace();
                        } catch (TimeoutException e) {
                            e.printStackTrace();
                        } finally {
                            try
                            {
                                _rstAsyncSocketChannel.close();
                                FasyncServer.accept(null, this);
                            } catch (Exception e) {
                                //System.out.println(e.toString());
                                e.printStackTrace();
                            }
                        }
                        System.out.println("end");
                    } // completed(...)
                    
                    @Override
                    public void failed(Throwable exc, Object attachment)
                    {
                        System.out.println("failed: " + exc);
                    }
                }); // FasyncServer.accept(...)
            
            // 主线程继续自己的行为
            while (true)
            {
                System.out.println("main thread");
                Thread.sleep(1000);
            }
        }
        
        public static void main(String args[]) throws Exception
        {
            System.out.println("main in <<==");
            new TaioServer().StartWithCompletionHandler();
            System.out.println("main out ==>>");
        }
    }

      1.2、

    package aio;
    
    import java.net.InetSocketAddress;
    import java.nio.ByteBuffer;
    import java.nio.channels.AsynchronousSocketChannel;
    import java.util.concurrent.Future;
    
    public class TaioClient
    {
        // http://yunhaifeiwu.iteye.com/blog/1714664
        public static void main(String[] args) throws Exception
        {
            AsynchronousSocketChannel client = AsynchronousSocketChannel.open();
            Future<Void> futureConn = client.connect(new InetSocketAddress("localhost", 9888));
            futureConn.get(); // Future<?>.get();等待异步事件的完成
            Future<Integer> futureWrite = client.write(ByteBuffer.wrap("testAA".getBytes()));
            int iWritten = futureWrite.get();
            System.out.println("Client send ["+iWritten+"] bytes .");
        }
    }

    2、

    3、

  • 相关阅读:
    从简单需求到OLAP的RANK系列函数
    数据库的Index Scan V.S. Rscan
    z/OS上Dataset 的移动
    如何保存CONSOLE LOG
    c#对文件进行MD5加密校验
    基于webpivottable做的透视表
    通过asp.net程序来控制自己开发的windows服务
    AES加密和解密
    C#添加日志
    cmd执行mssql脚本或者执行mysql脚本
  • 原文地址:https://www.cnblogs.com/javaskill/p/6071676.html
Copyright © 2011-2022 走看看