正如您可能已经注意到的,到目前为止,我们所看到的大多数示例都涉及TCP领域。这是因为大多数服务、应用程序和应用层协议都是构建在TCP之上的。这在某种程度上是默认选择。如果您不知道需要哪种协议,那就选择TCP。
UDP有点棘手,适用UDP更好的领域非常有限。在您提高网络技能之后,我们将稍后更详细地研究UDP的特性以及如何使用Boost.Asio处理UDP。与此同时,我们将继续学习如何处理TCP。
哦,还有ICMP!这家伙甚至比UDP更稀少。总有一天我们也会遇到它。但现在,让我们回到TCP。
因此,在本课中,我们将简要回顾到目前为止学到的所有内容。
基础知识
- 一切都始于并围绕着boost::asio::io_context类实例展开。所有I/O操作都由某个io_context处理。提供I/O功能的所有类在构造时都与某个io_context绑定,不能在其生命周期内重新绑定到另一个io_context上。首先,您创建至少一个io_context类实例。接下来,您在其之上执行其他操作。
- 要通过网络传输数据,您需要一个套接字。套接字类似于文件句柄,但是套接字上的操作更受限制,这些限制取决于您正在处理的网络协议:TCP、UDP或ICMP。
- TCP连接类似于双向顺序数据流。它可以打开并准备好操作,也可以关闭。您可以向其写入数据并从中读取数据(如果需要,可以同时进行)