packageaio;importjava.net.InetSocketAddress;import java.nio.*;import java.nio.channels.*;import java.util.concurrent.*;public classTaioServer
{public final static int PORT = 9888;privateAsynchronousServerSocketChannel FasyncServer;public TaioServer() throwsException
{
FasyncServer= AsynchronousServerSocketChannel.open().bind(newInetSocketAddress(PORT));
}//Future方式
public void StartWithFuture() throwsException
{
System.out.println("Server listen on " +PORT);
Future 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:" + newString(readBuf.array()));
System.out.println(Thread.currentThread().getName());
}//CompletionHandler方式
public void StartWithCompletionHandler() throwsException
{
System.out.println("Server listen on " +PORT);//注册事件和事件完成后的处理器
FasyncServer.accept(null, new CompletionHandler()
{final ByteBuffer buffer = ByteBuffer.allocate(1024);public voidcompleted(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(...)
@Overridepublic voidfailed(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[]) throwsException
{
System.out.println("main in <<==");newTaioServer().StartWithCompletionHandler();
System.out.println("main out ==>>");
}
}