当前位置:嗨网首页>书籍在线阅读

03-套接字和流

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.1.1 套接字和流

套接字指的是一个通信终端,而网络套接字指的是在不同的计算机上运行的两个应用程序之间进行通信所使用的终端。在套接字之间流通的数据就是我们所熟知的流。流中的数据可以以二进制的形式在缓冲器(buffer)中传输,也可以作为Unicode字符串来传输。两种数据类型都被作为封包(数据被切割为长度相似的块)来传输。有一种特殊的数据封包,即尾包(FIN),被作为数据传输结束的信号发送给套接字。

想象一下两个人在使用对讲机聊天。对讲机就是通信终端,也就是我们所说的套接字。当两个或者多个人要聊天时,他们就需要调节到相同的通信频率上。当一个人想要和其他人通信时,他会按下对讲机上的一个按钮,然后通过某种认证方式连接到适合的人。当通信结束时,他会说一句“完毕”,表示不再说话,转为收听模式。此时对方就可以按下按钮,确认开始通信,然后同样用“完毕”来表示结束讲话,进入收听模式。通信会一直持续,直到其中一个人说“完毕,结束对讲”,此时对讲才会结束。整个过程中同一时间只有一个人可以说话。

对讲机的通信流是半双工,因为同一时间,通信只能发生在一个方向上。全双工通信流则允许双向的通信。

同样的概念对Node流也适用。在第6章中我们同时使用过半双工流和全双工流。用于读写文件的流是一个半双工流的例子:该流同一时间只支持从文件中读取数据,或者向文件中写入数据。Zlib压缩流则是全双工流的例子,允许同时进行读和写。

现在,让我们把刚刚学到的内容应用到网络流(TCP)和加密流(Crypto)中。我们先来看看TCP模块,稍后再了解Crypto模块。