C++网络编程
文章平均质量分 89
本专栏将介绍C++网络编程各个方面的知识,包括:网络模型、IP地址和端口、TCP协议、UDP协议、套接字、非阻塞IO、异步IO、IO多路复用、SSL/TLS加密通信、HTTPS协议、WebSocket协议、并发模型、Web服务器等。通过理论结合实际的讲解方式,让你快速精通C++网络编程。
希望_睿智
中国科学技术大学毕业,专注于音视频领域近二十年,全网访问量近500万,粉丝近10万。在嵌入式开发、运营级平台、音视频编解码、视频图像处理、流媒体、深度学习、人工智能等多个方向具备实战开发经验和技术积累,共发表发明专利十余项,软件著作权几十项。商务合作和推广,可私信联系。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++网络编程之网络模型
所谓网络模型,是指一组定义了网络通信功能和行为的规则和标准。这些模型通过将网络通信功能分解成不同的层次,使得网络通信更加模块化,也更易于理解和实施。每一层都有其特定的功能,通过层与层之间的交互,确保数据能够从源端正确无误地传输到目的端。网络模型的核心思想是:将复杂的网络通信任务划分为若干个独立的层次,每一层专注于完成特定的功能,并与相邻层进行交互。这样做的好处是每一层可以独立设计、测试和优化,同时降低了系统的复杂度,提高了可维护性和互操作性。原创 2024-09-25 06:30:00 · 1080 阅读 · 15 评论 -
C++网络编程之IP地址和端口
IP地址和端口共同定义了网络通信中的源和目标。IP地址负责将数据从源设备正确地传输到目标设备,而端口则确保在目标设备上数据被交付到正确的应用或服务。因此,在网络编程中,IP地址和端口是密不可分的两个概念,共同构成了网络通信的基础。原创 2024-10-02 06:30:00 · 2397 阅读 · 20 评论 -
C++网络编程之TCP协议
TCP,即传输控制协议,英文全称为Transmission Control Protocol,是互联网协议套件中的核心协议之一。它工作在OSI七层模型的传输层,也工作在TCP/IP四层模型的传输层。TCP协议的主要目的是:在不可靠的网络环境中提供可靠的、面向连接的、基于字节流的传输服务。原创 2024-10-04 08:33:13 · 2294 阅读 · 30 评论 -
C++网络编程之UDP协议
UDP,即用户数据报协议,英文全称为User Datagram Protocol,是一种无连接的、不可靠的传输层协议。与TCP相比,UDP提供了更低的延迟和更少的开销,但不保证数据的可靠传输。在某些应用场景中,低延迟比数据的可靠性更为重要,这时UDP就成为了一个最佳的选择。UDP协议主要具有以下五个特点。1、无连接。UDP不需要建立连接,就可以直接发送数据。这意味着没有三次握手的过程,减少了网络延迟。2、不可靠。UDP不提供数据包的确认、重传或排序功能。原创 2024-10-09 06:56:57 · 1701 阅读 · 37 评论 -
C++网络编程之套接字基础
在网络编程中,套接字(Socket)是一种用于进程间通信的接口。套接字是操作系统提供的一种抽象层,它允许不同计算机之间的进程通过网络进行通信。套接字实际上并不神秘,简单来说,套接字是连接网络中不同主机上应用程序的桥梁,通过套接字,应用程序可以发送和接收数据。套接字有多种类型,最常见的两种是:流式套接字和数据报套接字。流式套接字:基于TCP协议,提供面向连接的、可靠的数据传输服务。数据在传输过程中会被组织成无边界的字节流,并按照发送顺序到达接收端。数据报套接字。原创 2024-10-11 08:53:10 · 1585 阅读 · 43 评论 -
C++网络编程之套接字选项配置
在C++网络编程中,套接字是实现网络通信的基础。通过套接字,我们除了可以发送和接收数据,还能够配置不同的选项来控制套接字的行为。这些选项可以通过setsockopt函数设置,并通过getsockopt函数获取当前的值。每个选项都有一个级别,表明它影响的是哪一层协议。还有一个名称和值,用于指定具体的选项名称和选项取值。接下来,我们介绍下getsockopt函数和setsockopt函数的原型。1、getsockopt函数:用于获取套接字的选项。sockfd:一个有效的套接字描述符。level。原创 2024-10-15 06:54:40 · 2055 阅读 · 34 评论 -
C++网络编程之字节序
字节序是指多字节数据在内存中的存储顺序。主要有两种字节序:大端序、小端序。大端序:即Big-Endian,高位字节存放在低地址处,低位字节存放在高地址处。比如:16位整数0x1234,在大端序下会以0x12 0x34的形式存储。小端序:即Little-Endian,低位字节存放在低地址处,高位字节存放在高地址处。比如:16位整数0x1234,在小端序下会以0x34 0x12的形式存储。需要注意的是:不同计算机系统可能使用不同的字节序来存储多字节的数据类型。原创 2024-10-19 09:22:12 · 1944 阅读 · 27 评论 -
C++网络编程之绑定
在网络编程中,绑定是一个非常重要的概念,它涉及到将一个套接字与一个特定的IP地址和端口进行关联。通过绑定,服务器可以指定它监听哪个网络接口和端口,以便接收来自客户端的连接请求。原创 2024-10-23 07:48:38 · 1087 阅读 · 31 评论 -
C++网络编程之C/S模型
在网络编程中,客户端/服务器模型(即C/S模型)是一种常见的架构模式。在这种模式下,一个或多个客户端向服务器建立连接,并发送请求;服务器接受这些连接,并处理请求、返回响应。在C/S模型中,客户端会主动发起与服务器的连接,发送请求,并接收服务器的响应。客户端可以是任何能够发起网络连接的设备或应用程序。服务器通常运行在网络中的固定位置,监听特定端口以接受来自客户端的连接请求。原创 2024-10-25 07:35:48 · 1968 阅读 · 37 评论 -
C++网络编程之非阻塞IO
在网络编程中,IO(输入输出)操作是程序与外部世界交互的基础。非阻塞IO,是相对于阻塞IO而言的,两者在编程、表现和效果上均有显著的差别。阻塞IO是最直接、且易于理解的IO模型。当一个线程执行读写函数时,如果数据还没有准备好,或者暂时无法完成写入,则线程会停留在该函数这里,无法继续往下执行,直到条件满足为止。阻塞IO的好处在于:实现简单,逻辑清晰。但缺点也很明显:在阻塞期间,整个线程无法执行其他代码,只能被动等待函数执行完,不利于构建高效的应用程序。原创 2024-10-29 07:45:10 · 2258 阅读 · 36 评论 -
C++网络编程之异步IO
在网络编程中,IO操作是主要的性能瓶颈之一。传统的阻塞IO和非阻塞IO虽然各有优势,但在高并发和高性能要求的场景下,它们都有各自的局限性。异步IO(即AIO,Asynchronous IO)提供了一种更高效的方式来处理IO操作,特别是在需要同时处理大量连接的情况下。原创 2024-11-02 13:38:35 · 2988 阅读 · 30 评论 -
C++网络编程之IO多路复用(一)
在C++网络编程中,处理并发连接是一个非常关键的核心问题。为了有效管理来自多个客户端的请求,服务器需要能够同时监听多个套接字上的事件,这通常通过IO多路复用来实现。IO多路复用是一种工作机制,它可以让程序监视多个文件描述符(通常是套接字),等待其中一个或多个文件描述符变为就绪状态。一旦某个文件描述符就绪,即该文件描述符上可以进行无阻塞读写操作,操作系统就会通知应用程序。然后,应用程序就可以对该文件描述符进行相应的读写操作。使用IO多路复用后,不需要为每个连接创建一个独立的线程,节省了资源。原创 2024-11-06 06:30:00 · 1564 阅读 · 34 评论 -
C++网络编程之IO多路复用(二)
在上一篇文章中,我们介绍了如何使用select进行IO多路复用。虽然select在很多场景下非常有用,但它存在线性扫描、复制文件描述符集合、不支持边缘触发模式、信号干扰等众多问题。因此,在更高效的IO多路复用方案中,往往会选择poll和epoll。在本篇中,我们将重点介绍poll,下一篇将介绍epoll。原创 2024-11-08 08:53:52 · 1591 阅读 · 45 评论 -
C++网络编程之IO多路复用(三)
在前两篇文章中,我们介绍了如何使用select和poll进行IO多路复用。select通常有一个固定的文件描述符数量上限(通常是1024),poll虽然没有严格的文件描述符数量限制,但在实际使用中也可能受到系统资源的限制。相比之下,epoll支持非常大的文件描述符数量(理论上可以达到系统文件描述符的最大值),因此更适合高并发场景。在本篇中,我们将重点介绍epoll。原创 2024-11-11 13:25:12 · 2015 阅读 · 41 评论 -
C++网络编程之零拷贝技术
在网络编程中,性能优化是一个永恒的话题。随着数据量的不断增大,传统的数据传输方式往往因为多次内存拷贝而变得效率低下。对于网络编程来说,从磁盘读取文件,然后通过网卡进行发送;或者反过来,从网卡接收数据,然后写入到磁盘中,是比较常见的两种使用场景。在零拷贝技术出现之前,我们有两种方式来实现这个过程:一种是仅CPU方式,另一种是CPU+DMA方式。下面,我们分别进行介绍。为了提高数据的处理速度,并减少CPU和内存带宽的消耗,零拷贝(Zero-copy)技术应运而生。原创 2024-10-24 07:35:32 · 3387 阅读 · 49 评论 -
C++网络编程之SSL/TLS加密通信
在互联网时代,数据的安全性变得尤为重要。随着网络安全威胁的不断增加,确保信息传输过程中的机密性、完整性和可用性成为了开发者必须考虑的关键因素。在C++网络编程中,使用SSL/TLS加密通信是一种常见的做法。它允许客户端和服务器之间通过互联网安全地交换信息,从而为网络通信提供隐私性和数据完整性。SSL,英文全称为Secure Sockets Layer,最初由Netscape公司在1990年代开发,用于保护Web浏览器与服务器间的通信。原创 2024-11-13 08:41:20 · 10701 阅读 · 48 评论 -
C++网络编程之WebSocket通信
WebSocket协议是现代Web开发中不可或缺的一部分,它允许客户端和服务器之间建立持久的连接,实现双向实时通信。与传统的HTTP请求不同,WebSocket提供了一种全双工的通信通道,使得数据可以在任意方向上传输,而无需等待对方请求或者应答。WebSocket是在HTML5中引入的一种新协议,旨在替代轮询等技术来实现客户端与服务器间的实时交互。它通过HTTP或HTTPS协议发起一个特殊的请求,一旦连接建立成功,就可以绕过HTTP协议直接进行数据交换。原创 2024-11-20 06:30:00 · 3425 阅读 · 47 评论 -
C++网络编程之多播
在移动互联网时代,随着多媒体应用的日益普及,如何高效地将数据传输给多个接收者成为了网络通信领域的一个重要课题。多播(英文为Multicast)作为一种高效的网络通信方式,可以将数据同时发送到多个接收者,而不需要为每个接收者单独建立连接。与单播(英文为Unicast)相比,多播减少了网络中的数据包复制,从而降低了带宽消耗。与广播(英文为Broadcast)相比,多播仅向那些明确表示希望接收数据的主机发送数据,而不是局域网内的所有主机。原创 2024-11-25 06:30:00 · 2587 阅读 · 19 评论
分享