• JavaSE:NIO


    <0> 网络编程 - 回顾 (基于普通的IO)

    这种方式的特点: 同步阻塞,也就是说,服务器在等待客户端连接时, 会进入阻塞,无法进行其他的操作

     

    <0>基于NIO, 完成网络编程的收发消息

          特点:同步非阻塞(并发支持高)

          服务器在等待客户端连接的同时,可以进行其他的操作

    <1>客户端

     1 import java.io.IOExcepiton;
     2 
     3 import java.net.InetSocketAddress;
     4 
     5 import java.nio.ByteBuffer;
     6 
     7 import java.nio.channels.SocketChannel;
     8 
     9 
    10 
    11 public class Demo客户端 {
    12 
    13   main() throws IOException {
    14 
    15 
    16 
    17     // 创建客户端
    18     SocketcChannel sc = SocketChannel.open();
    19 
    20 
    21     // 指定要连接的服务器ip和端口
    22     sc.connect(new InetSocketAddress("127.0.0.1",9000));
    23 
    24 
    25     // 创建缓冲输出
    26     ByteBuffer buffer = ByteBuffer.allocate(1024);
    27 
    28     
    29 
    30     // 给数组添加数据
    31 
    32     buffer.put("哈哈哈".getBytes());
    33 
    34 
    35 
    36     // 切换
    37 
    38     buffer.flip();
    39 
    40 
    41 
    42     // 输出数据
    43 
    44     sc.write(buffer);
    45 
    46 
    47 
    48     // 关闭资源
    49 
    50     sc.close(); 
    51   }
    52 
    53 }

    <2> 服务器端

     1 import  java.io.IOException;
     2 
     3 import  java.net.InetSocketAddress;
     4 
     5 import  java.nio.ByteBuffer;
     6 
     7 import  java.nio.channels.ServerSocketChannel;
     8 
     9 import  java.nio.channels.SocketChannel;
    10 
    11 
    12 
    13 public class Demo服务端 {
    14 
    15   // 阻塞的
    16 
    17   main() throws IOException {
    18 
    19 
    20 
    21     // 创建服务器对象
    22 
    23     ServerSocketChannel ssc = ServerSocketChannel.open();
    24 
    25 
    26 
    27     // 绑定端口号
    28     ssc.bind(new InetSocketAddress(9000));
    29     
    30     // 连接客户端
    31     SocketChannel sc = ssc.accept();
    32 
    33 
    34     // 创建缓冲数组
    35     ByteBuffer buffer = ByteBuffer.allocate(1024);
    36 
    37 
    38     // 读取数据
    39     int len = sc.read(buffer);
    40 
    41 
    42     // 打印
    43     System.out.println(new String(buffer.array(),0,len));
    44 
    45   }
    46 
    47 }

    Plus: 分析

     需要添加一行代码:

  • 相关阅读:
    没有一个计时器控制在VB6计时器功能
    检测系统范围内的鼠标事件
    c# Com
    tcpdump
    dd
    dumpe/dumpe2fs/e2fsck
    fdisk
    mkswap/swapon/swapoff/free
    mkfs/mk2fs/fsck/e2fsck/tune2fs/blkid
    parted
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14959109.html
Copyright © 2020-2023  润新知