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: 分析

 

 需要添加一行代码:

 

posted @ 2021-07-01 15:47  Jasper2003  阅读(73)  评论(0编辑  收藏  举报