java tcp 异步_TCP异步IO_服务端_测试

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值