广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州什么是Java异步套接字通道?_北大青鸟IT学校

作者:邓华发布时间:2021-05-13分类:Java技术浏览:871


导读:什么是Java异步套接字通道?这是每个学习Java的同学都会遇到的问题,下面我们一起来看看惠州北大青鸟老师是怎么回答的。

什么是Java异步套接字通道?这是每个学习Java的同学都会遇到的问题,下面我们一起来看看惠州北大青鸟老师是怎么回答的。

使用以下两个套接字通道类来执行异步套接字操作:

java.nio.channels.AsynchronousServerSocketChannel
java.nio.channels.AsynchronousSocketChannel

以下代码显示如何创建使用异步服务器套接字通道的服务器应用程序。

实例

import java.io.IOException;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.channels.AsynchronousServerSocketChannel;import java.nio.channels.AsynchronousSocketChannel;import java.nio.channels.CompletionHandler;import java.nio.charset.Charset;public class Main {  public static void main(String[] args) throws Exception {
   AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel
       .open();
   String host = "localhost";    int port = 8989;
   InetSocketAddress sAddr = new InetSocketAddress(host, port);
   server.bind(sAddr);
   System.out.format("Server is listening at %s%n", sAddr);
   Attachment attach = new Attachment();
   attach.server = server;
   server.accept(attach, new ConnectionHandler());
   Thread.currentThread().join();
 }
}class Attachment {
 AsynchronousServerSocketChannel server;
 AsynchronousSocketChannel client;
 ByteBuffer buffer;
 SocketAddress clientAddr;  boolean isRead;
}class ConnectionHandler implements
   CompletionHandler<AsynchronousSocketChannel, Attachment> {
 @Override  public void completed(AsynchronousSocketChannel client, Attachment attach) {    try {
     SocketAddress clientAddr = client.getRemoteAddress();
     System.out.format("Accepted a  connection from  %s%n", clientAddr);
     attach.server.accept(attach, this);
     ReadWriteHandler rwHandler = new ReadWriteHandler();
     Attachment newAttach = new Attachment();
     newAttach.server = attach.server;
     newAttach.client = client;
     newAttach.buffer = ByteBuffer.allocate(2048);
     newAttach.isRead = true;
     newAttach.clientAddr = clientAddr;
     client.read(newAttach.buffer, newAttach, rwHandler);
   } catch (IOException e) {
     e.printStackTrace();
   }
 }

 @Override  public void failed(Throwable e, Attachment attach) {
   System.out.println("Failed to accept a  connection.");
   e.printStackTrace();
 }
}class ReadWriteHandler implements CompletionHandler<Integer, Attachment> {
 @Override  public void completed(Integer result, Attachment attach) {    if (result == -1) {      try {
       attach.client.close();
       System.out.format("Stopped   listening to the   client %s%n",
           attach.clientAddr);
     } catch (IOException ex) {
       ex.printStackTrace();
     }      return;
   }    if (attach.isRead) {
     attach.buffer.flip();      int limits = attach.buffer.limit();      byte bytes[] = new byte[limits];
     attach.buffer.get(bytes, 0, limits);
     Charset cs = Charset.forName("UTF-8");
     String msg = new String(bytes, cs);
     System.out.format("Client at  %s  says: %s%n", attach.clientAddr,
         msg);
     attach.isRead = false; // It is a write      attach.buffer.rewind();

   } else {      // Write to the client      attach.client.write(attach.buffer, attach, this);
     attach.isRead = true;
     attach.buffer.clear();
     attach.client.read(attach.buffer, attach, this);
   }
 }

 @Override  public void failed(Throwable e, Attachment attach) {
   e.printStackTrace();
 }
}

上面的代码生成以下结果。

Server is listening at localhost/127.0.0.1:8989

...

想了解更多关于Java的资讯吗?可以来惠州北大青鸟新方舟校区了解一下。

java7.png

Java

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表