文章来源:
恋恋风辰的编程笔记
https://gitbookcpp.llfc.club/sections/cpp/boost/asio03.html

boost环境配置
网络编程基本流程
网络编程的基本流程对于服务端是这样的 服务端
1)socket----创建socket对象。

2)bind----绑定本机ip+port。

3)listen----监听来电,若在监听到来电,则建立起连接。

4)accept----再创建一个socket对象给其收发消息。原因是现实中服务端都是面对多个客户端,那么为了区分各个客户端,则每个客户端都需再分配一个socket对象进行收发消息。

5)read、write----就是收发消息了。

对于客户端是这样的 客户端 1)socket----创建socket对象。

2)connect----根据服务端ip+port,发起连接请求。

3)write、read----建立连接后,就可发收消息了。

原文中还有一张图,图中是基本的通讯流程,是一个同步模型,同时也是阻塞的。

以下内容来自豆包
c++ window和linux中异步,同步服务器实现区别
在 C++ 中,在 Windows 和 Linux 平台上实现同步和异步服务器存在一些区别,主要体现在以下几个方面:
一、同步服务器实现区别
系统调用差异:
Windows:通常使用 Winsock API 进行网络编程。例如,使用 socket、bind、listen、accept、send 和 recv 等函数来实现同步服务器。
Linux:使用 POSIX 标准的网络编程接口,功能与 Windows 下的类似函数作用相似,但具体参数和返回值可能有所不同。
错误处理方式:
Windows:错误码通常通过 WSAGetLastError 函数获取,错误码是特定于 Winsock 的。
Linux:错误码通过 errno 获取,是通用的 POSIX 错误码。

二、异步服务器实现区别
异步机制实现:
Windows:可以使用 Windows 提供的 I/O 完成端口(IOCP)进行高效的异步网络编程。IOCP 是一种基于线程池的异步 I/O 模型,适用于大规模并发连接。
Linux:通常使用 epoll、kqueue 等机制来实现异步服务器。epoll 是 Linux 下高性能的 I/O 事件通知机制,可以高效地处理大量并发连接。
编程接口差异:
Windows:异步编程接口相对复杂,需要处理 I/O 完成通知、分配缓冲区等操作,通常需要深入了解 Windows 的异步编程模型。
Linux:使用 epoll 等机制的编程接口相对简洁明了,但也需要对异步编程的概念有较好的理解。

c++window下网络编程,同步通讯一定阻塞吗?异步通信一定非阻塞吗?
在 C++ Windows 下的网络编程中:
一、同步通讯不一定总是阻塞
同步通讯通常在执行特定的网络操作(如 recv、send、accept 等)时会进入阻塞状态,等待操作完成后才返回。但这并不意味着在整个同步通讯过程中一直处于阻塞状态。
例如,在多线程环境下,可以创建一个专门的工作线程来处理同步网络操作。当主线程发起一个同步网络请求后,这个请求会在工作线程中阻塞等待结果,而主线程可以继续执行其他任务,不会被阻塞。这样从整个程序的角度来看,虽然某个线程在执行同步操作时阻塞了,但程序整体并没有完全被阻塞。
此外,一些同步网络操作可能会因为错误或特殊情况而立即返回,而不是一直阻塞。比如,当连接已经关闭时,recv 可能会立即返回 0,表示连接关闭,而不是阻塞等待数据。
二、异步通信不一定总是非阻塞
异步通信通常采用非阻塞的方式来执行网络操作,通过注册回调函数或使用事件通知机制,使得程序在网络操作进行的同时可以继续执行其他任务,而不必等待操作完成。
然而,在某些情况下,异步操作可能会表现出类似阻塞的行为。例如,如果在异步操作的回调函数中执行了一个长时间运行的任务,那么在这个任务执行期间,程序实际上是被阻塞在这个回调函数中的,虽然网络操作本身是以异步方式发起的,但程序在这个特定的时间段内无法继续执行其他与网络操作无关的任务。
另外,如果异步操作的资源被耗尽(如 Windows 下的 I/O 完成端口中的线程池线程都在忙碌),新的异步操作可能会被延迟处理,从而在一定程度上表现出类似阻塞的行为,直到有可用的资源来处理这个操作。
综上所述,在 C++ Windows 下的网络编程中,同步通讯不一定总是阻塞,异步通信也不一定总是非阻塞。具体的行为取决于程序的架构、使用场景以及系统的状态等多种因素。


p2已经看完
https://www.bilibili.com/video/BV1jm4y1r7AY/?spm_id_from=pageDriver&vd_source=8577a3c61e37ed5613d2aad007d6f9aa