加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 建站 > 正文

BIO和NIO了解多少呢?一起从实践角度重新理解下吧

发布时间:2019-10-23 21:06:53 所属栏目:建站 来源:追逐仰望星空
导读:副标题#e# 01 前言 这段时间自己在看一些Java中BIO和NIO之类的东西,看了很多博客,发现各种关于NIO的概念说的天花乱坠头头是道,可以说是非常的完整,但是整个看下来之后,自己对NIO还是一知半解的状态,所以这篇文章不会提到很多的概念,而是站在一个实践

完成了服务端的设计后,我们来实现一个客户端,首先实例化Socket对象,并且绑定ip为127.0.0.1(本机),端口号为8080,调用write方法向服务器发送数据。

BIO和NIO了解多少呢?一起从实践角度重新理解下吧

2.5 运行结果

当我们启动服务器,但客户端还没有向服务器发起连接时,控制台结果如下:

BIO和NIO了解多少呢?一起从实践角度重新理解下吧

当客户端启动并向服务器发送数据后,控制台结果如下:

BIO和NIO了解多少呢?一起从实践角度重新理解下吧

2.6 结论

从上面的运行结果,首先我们至少可以看到,在服务器启动后,客户端还没有连接服务器时,服务器由于调用了accept方法,将一直阻塞,直到有客户端请求连接服务器。

03 对客户端功能进行扩展

在上文中,我们实现的客户端的逻辑主要是,建立Socket --> 连接服务器 --> 发送数据,我们的数据是在连接服务器之后就立即发送的,现在我们来对客户端进行一次扩展,当我们连接服务器后,不立即发送数据,而是等待控制台手动输入数据后,再发送给服务端。(服务端代码保持不变)

3.1 代码

  1. public class Consumer { 
  2.     public static void main(String[] args) { 
  3.         try { 
  4.             Socket socket = new Socket("127.0.0.1",8080); 
  5.             String message = null; 
  6.             Scanner sc = new Scanner(System.in); 
  7.             message = sc.next(); 
  8.             socket.getOutputStream().write(message.getBytes()); 
  9.             socket.close(); 
  10.             sc.close(); 
  11.         } catch (IOException e) { 
  12.             // TODO Auto-generated catch block 
  13.             e.printStackTrace(); 
  14.         } 
  15.     } 

3.2 测试

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读