服务器udp非阻塞收数据

 DatagramChannel  datagramChannel_T=null;

 try  { 
                 selector = Selector.open();

                  datagramChannel_T=DatagramChannel.open();
                 datagramChannel_T.configureBlocking(false);//设置为非阻塞
                 datagramChannel_T.socket().bind(new InetSocketAddress(10000)); // 收数据端口

                //  OP_ACCEPT(用于服务器端)、OP_CONNECT(用于客户端)、OP_READ和OP_WRITE
                 datagramChannel_T.register(selector, SelectionKey.OP_READ); //因为UDP 不存在 客户端和服务器连接,所以不能用  OP_ACCEPT

        
                           }
             catch  ( Exception e )
             {
                 e.printStackTrace () ; 
                 
             }

 

            byte[] bufferData=new byte[1500];
             ByteBuffer byteBuffer = ByteBuffer.wrap(bufferData); 

           while  ( true)

{

           try

 {

     int  eventsCount = selector.selectNow(); 

  if(eventsCount == 0)

 {
                     
     continue;  
    }

       if  ( eventsCount >  0 ) {   

    Iterator<SelectionKey> iterator =  selector.selectedKeys () .iterator ();                       

   while  ( iterator.hasNext ()) {

 SelectionKey sk =  ( SelectionKey )  iterator.next () ;

iterator.remove () ;

   if  ( sk.isReadable ()) {

 

  DatagramChannel datagramChannel =  ( DatagramChannel )  sk .channel () ;

datagramChannel.receive(byteBuffer);

byteBuffer.flip () ;

 byte[] byten = new byte[byteBuffer.limit()]; // 可用的字节数量

  byteBuffer.get(byten, byteBuffer.position(), byteBuffer.limit()); // 得到目前为止缓冲区所有的数据 

 byteBuffer.clear () ;


                             }
                       
                             
                         }
                     }
                 } 
                 catch  ( Exception e )
                 {
                     e.printStackTrace (); 
                  
                     break;
                 }
             }

 

 

 

}

}

这代码 是android 下利用NIO技术 来通过udp协议收流, 这个是非阻塞的, 是基于IO事件来轮训 ,效率高于socket那种阻塞模型,这个NIO技术还是基于socket 的        

 

posted on 2013-12-16 10:50  OnCode  阅读(686)  评论(0)    收藏  举报

导航