<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: 分析
需要添加一行代码: