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

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

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


导读:大家知道什么是Java异步客户端套接字通道吗?下面跟着惠州北大青鸟老师一起来学习一下Java异步客户端套接字通道的知识,希望对大家学习Java有帮助。

大家知道什么是Java异步客户端套接字通道吗?下面跟着惠州北大青鸟老师一起来学习一下Java异步客户端套接字通道的知识,希望对大家学习Java有帮助。

AsynchronousSocketChannel 类用作客户端应用程序中的异步客户端套接字通道。

以下代码显示如何创建异步客户端套接字通道。

import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.channels.AsynchronousSocketChannel;import java.nio.channels.CompletionHandler;import java.nio.charset.Charset;import java.util.concurrent.Future;public class Main {  public static void main(String[] args) throws Exception {
   AsynchronousSocketChannel channel = AsynchronousSocketChannel.open();
   SocketAddress serverAddr = new InetSocketAddress("localhost", 8989);
   Future<Void> result = channel.connect(serverAddr);
   result.get();
   System.out.println("Connected");
   Attachment attach = new Attachment();
   attach.channel = channel;
   attach.buffer = ByteBuffer.allocate(2048);
   attach.isRead = false;
   attach.mainThread = Thread.currentThread();

   Charset cs = Charset.forName("UTF-8");
   String msg = "Hello";    byte[] data = msg.getBytes(cs);
   attach.buffer.put(data);
   attach.buffer.flip();

   ReadWriteHandler readWriteHandler = new ReadWriteHandler();
   channel.write(attach.buffer, attach, readWriteHandler);
   attach.mainThread.join();
 }
}class Attachment {
 AsynchronousSocketChannel channel;
 ByteBuffer buffer;
 Thread mainThread;  boolean isRead;
}class ReadWriteHandler implements CompletionHandler<Integer, Attachment> {
 @Override  public void completed(Integer result, Attachment attach) {    if (attach.isRead) {
     attach.buffer.flip();
     Charset cs = Charset.forName("UTF-8");      int limits = attach.buffer.limit();      byte bytes[] = new byte[limits];
     attach.buffer.get(bytes, 0, limits);
     String msg = new String(bytes, cs);
     System.out.format("Server Responded: "+ msg);      try {
       msg = this.getTextFromUser();
     } catch (Exception e) {
       e.printStackTrace();
     }      if (msg.equalsIgnoreCase("bye")) {
       attach.mainThread.interrupt();        return;
     }
     attach.buffer.clear();      byte[] data = msg.getBytes(cs);
     attach.buffer.put(data);
     attach.buffer.flip();
     attach.isRead = false; // It is a write      attach.channel.write(attach.buffer, attach, this);
   }else {
     attach.isRead = true;
     attach.buffer.clear();
     attach.channel.read(attach.buffer, attach, this);
   }
 }
 @Override  public void failed(Throwable e, Attachment attach) {
   e.printStackTrace();
 }  private String getTextFromUser() throws Exception{
   System.out.print("Please enter a  message  (Bye  to quit):");
   BufferedReader consoleReader = new BufferedReader(        new InputStreamReader(System.in));
   String msg = consoleReader.readLine();    return msg;
 }
}

更多Java资讯关注网站动态,或者来惠州北大青鸟新方舟校区了解一下。

java5.png

Java

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


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