java NIO非阻塞Udp 案例(服务器端测试丢包率)

需求:用NIO接收部署在linux服务器上发送过来的信息条数。用来测试丢包率

 

datagramChannel = DatagramChannel.open();

datagramChannel.socket().setReceiveBufferSize(1024*100);

datagramChannel.configureBlocking(false);

datagramChannel.socket().bind(new InetSocketAddress(8999));

DefaultUdpNioCommunicationManager.selector = Selector.open();

datagramChannel.register(selector, SelectionKey.OP_READ);

while (true) {
		try {
			selectortemp.select();
			Iterator ite = selectortemp.selectedKeys().iterator(); 
			while (ite.hasNext()) {
				SelectionKey key = (SelectionKey)ite.next();  					
				ite.remove();
				if (key.isReadable()) {
					read(key);
				}
			}
		} catch (IOException e) { 
			log.error(e.getMessage(), e);
		}	
	}
datagramChannel=(DatagramChannel)key.channel();
		
datagramChannel.configureBlocking(false);
		
ByteBuffer buffer=ByteBuffer.allocate(1404);

buffer.clear();

SocketAddress dAddress=datagramChannel.receive(buffer);

int a=dAddress.toString().indexOf(":");

String port1=dAddress.toString().substring(a+1);

int port=Integer.parseInt(port1);

buffer.flip();

count++;

if(count > 10000){

   	System.out.println(this.dd+"收报数:"+count);		

 }

byte[] data =buffer.array(); 

int length=udpConfig.getReceivePacketLength();

threadPool.execute(new 
UdpNioReceiveHandleRunnable(port,length,data,datagramChannel,threadPool));

 

你可能感兴趣的:(java进阶篇,java,实战demo)