91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java NIO代碼怎么寫

發布時間:2022-01-14 20:12:33 來源:億速云 閱讀:186 作者:iii 欄目:編程語言

這篇文章主要講解了“Java NIO代碼怎么寫”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java NIO代碼怎么寫”吧!

Java代碼:

import java.io.IOException;  import java.net.InetSocketAddress;  import java.net.ServerSocket;  import java.nio.ByteBuffer;  import java.nio.channels.SelectionKey;  import java.nio.channels.Selector;  import java.nio.channels.ServerSocketChannel;  import java.nio.channels.SocketChannel;  import java.util.Iterator;  import java.util.Set;   public class NIOServer {            /*標識數字*/     private  int flag = 0;      /*緩沖區大小*/     private  int BLOCK = 4096;      /*接受數據緩沖區*/     private  ByteBuffer sendbuffer = ByteBuffer.allocate(BLOCK);      /*發送數據緩沖區*/     private  ByteBuffer receivebuffer = ByteBuffer.allocate(BLOCK);      private  Selector selector;       public NIOServer(int port) throws IOException {          // 打開服務器套接字通道          ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();          // 服務器配置為非阻塞          serverSocketChannel.configureBlocking(false);          // 檢索與此通道關聯的服務器套接字          ServerSocket serverSocket = serverSocketChannel.socket();          // 進行服務的綁定          serverSocket.bind(new InetSocketAddress(port));          // 通過open()方法找到Selector          selector = Selector.open();          // 注冊到selector,等待連接          serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);          System.out.println("Server Start----8888:");      }        // 監聽      private void listen() throws IOException {          while (true) {              // 選擇一組鍵,并且相應的通道已經打開              selector.select();              // 返回此選擇器的已選擇鍵集。              Set<SelectionKey> selectionKeys = selector.selectedKeys();              Iterator<SelectionKey> iterator = selectionKeys.iterator();              while (iterator.hasNext()) {                          SelectionKey selectionKey = iterator.next();                  iterator.remove();                  handleKey(selectionKey);              }          }      }       // 處理請求      private void handleKey(SelectionKey selectionKey) throws IOException {          // 接受請求          ServerSocketChannel server = null;          SocketChannel client = null;          String receiveText;          String sendText;          int count=0;          // 測試此鍵的通道是否已準備好接受新的套接字連接。          if (selectionKey.isAcceptable()) {              // 返回為之創建此鍵的通道。              server = (ServerSocketChannel) selectionKey.channel();              // 接受到此通道套接字的連接。              // 此方法返回的套接字通道(如果有)將處于阻塞模式。              client = server.accept();              // 配置為非阻塞              client.configureBlocking(false);              // 注冊到selector,等待連接              client.register(selector, SelectionKey.OP_READ);          } else if (selectionKey.isReadable()) {              // 返回為之創建此鍵的通道。              client = (SocketChannel) selectionKey.channel();              //將緩沖區清空以備下次讀取              receivebuffer.clear();              //讀取服務器發送來的數據到緩沖區中              count = client.read(receivebuffer);               if (count > 0) {                  receiveText = new String( receivebuffer.array(),0,count);                  System.out.println("服務器端接受客戶端數據--:"+receiveText);                  client.register(selector, SelectionKey.OP_WRITE);              }          } else if (selectionKey.isWritable()) {              //將緩沖區清空以備下次寫入              sendbuffer.clear();              // 返回為之創建此鍵的通道。              client = (SocketChannel) selectionKey.channel();              sendText="message from server--" + flag++;              //向緩沖區中輸入數據              sendbuffer.put(sendText.getBytes());               //將緩沖區各標志復位,因為向里面put了數據標志被改變要想從中讀取數據發向服務器,就要復位              sendbuffer.flip();              //輸出到通道              client.write(sendbuffer);              System.out.println("服務器端向客戶端發送數據--:"+sendText);              client.register(selector, SelectionKey.OP_READ);          }      }       /**       * @param args       * @throws IOException       */     public static void main(String[] args) throws IOException {          // TODO Auto-generated method stub          int port = 8888;          NIOServer server = new NIOServer(port);          server.listen();      }  }

Java代碼:

import java.io.IOException;  import java.net.InetSocketAddress;  import java.nio.ByteBuffer;  import java.nio.channels.SelectionKey;  import java.nio.channels.Selector;  import java.nio.channels.SocketChannel;  import java.util.Iterator;  import java.util.Set;   public class NIOClient {       /*標識數字*/     private static int flag = 0;      /*緩沖區大小*/     private static int BLOCK = 4096;      /*接受數據緩沖區*/     private static ByteBuffer sendbuffer = ByteBuffer.allocate(BLOCK);      /*發送數據緩沖區*/     private static ByteBuffer receivebuffer = ByteBuffer.allocate(BLOCK);      /*服務器端地址*/     private final static InetSocketAddress SERVER_ADDRESS = new InetSocketAddress(              "localhost", 1111);       public static void main(String[] args) throws IOException {          // TODO Auto-generated method stub          // 打開socket通道          SocketChannel socketChannel = SocketChannel.open();          // 設置為非阻塞方式          socketChannel.configureBlocking(false);          // 打開選擇器          Selector selector = Selector.open();          // 注冊連接服務端socket動作          socketChannel.register(selector, SelectionKey.OP_CONNECT);          // 連接          socketChannel.connect(SERVER_ADDRESS);          // 分配緩沖區大小內存                    Set<SelectionKey> selectionKeys;          Iterator<SelectionKey> iterator;          SelectionKey selectionKey;          SocketChannel client;          String receiveText;          String sendText;          int count=0;           while (true) {              //選擇一組鍵,其相應的通道已為 I/O 操作準備就緒。              //此方法執行處于阻塞模式的選擇操作。              selector.select();              //返回此選擇器的已選擇鍵集。              selectionKeys = selector.selectedKeys();              //System.out.println(selectionKeys.size());              iterator = selectionKeys.iterator();              while (iterator.hasNext()) {                  selectionKey = iterator.next();                  if (selectionKey.isConnectable()) {                      System.out.println("client connect");                      client = (SocketChannel) selectionKey.channel();                      // 判斷此通道上是否正在進行連接操作。                      // 完成套接字通道的連接過程。                      if (client.isConnectionPending()) {                          client.finishConnect();                          System.out.println("完成連接!");                          sendbuffer.clear();                          sendbuffer.put("Hello,Server".getBytes());                          sendbuffer.flip();                          client.write(sendbuffer);                      }                      client.register(selector, SelectionKey.OP_READ);                  } else if (selectionKey.isReadable()) {                      client = (SocketChannel) selectionKey.channel();                      //將緩沖區清空以備下次讀取                      receivebuffer.clear();                      //讀取服務器發送來的數據到緩沖區中                      count=client.read(receivebuffer);                      if(count>0){                          receiveText = new String( receivebuffer.array(),0,count);                          System.out.println("客戶端接受服務器端數據--:"+receiveText);                          client.register(selector, SelectionKey.OP_WRITE);                      }                   } else if (selectionKey.isWritable()) {                      sendbuffer.clear();                      client = (SocketChannel) selectionKey.channel();                      sendText = "message from client--" + (flag++);                      sendbuffer.put(sendText.getBytes());                       //將緩沖區各標志復位,因為向里面put了數據標志被改變要想從中讀取數據發向服務器,就要復位                      sendbuffer.flip();                      client.write(sendbuffer);                      System.out.println("客戶端向服務器端發送數據--:"+sendText);                      client.register(selector, SelectionKey.OP_READ);                  }              }              selectionKeys.clear();          }      }  }

感謝各位的閱讀,以上就是“Java NIO代碼怎么寫”的內容了,經過本文的學習后,相信大家對Java NIO代碼怎么寫這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 嘉兴市| 德安县| 东莞市| 渭南市| 崇州市| 邵东县| 遂昌县| 报价| 新化县| 黄山市| 札达县| 苍山县| 寻甸| 平舆县| 奇台县| 扎兰屯市| 鹿邑县| 勐海县| 孟村| 阿鲁科尔沁旗| 大关县| 阜康市| 萨迦县| 衡水市| 历史| 台北市| 游戏| 桃园市| 河池市| 鹤峰县| 文安县| 息烽县| 海林市| 彝良县| 定远县| 宣威市| 南陵县| 大埔县| 本溪市| 广饶县|