网络编程
文章平均质量分 86
浅慕Antonio
分享编程知识
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【网络编程】WebSocket 实现简易Web多人聊天室
本文介绍了一个基于WebSocket的简易聊天室实现方案,分为Web端和服务端两部分。Web端使用HTML+JavaScript构建界面,通过WebSocket与服务器保持长连接,实现了消息发送和接收功能,并区分不同消息类型(加入、离开、聊天)的显示样式。服务端采用C++编写,基于WebSocket++库进行改造,支持多客户端连接和消息广播功能。核心功能包括建立WebSocket连接、处理消息收发、管理客户端连接列表等。文章详细展示了Web端的HTML结构和JavaScript实现代码,以及服务端的C++关原创 2025-08-01 04:51:11 · 1291 阅读 · 0 评论 -
【网络编程】WebSocket协议介绍
WebSocket是一种全双工通信协议,基于TCP实现,通过HTTP Upgrade机制建立持久连接后实现双向实时数据传输。其特点包括低开销(最小2字节头部)、支持文本/二进制帧、心跳检测等。协议分为握手阶段(HTTP 101切换)和数据传输阶段(二进制帧结构)。帧格式包含FIN标志、操作码、掩码、负载长度等字段,支持分片传输大消息。WebSocket解决了HTTP在实时通信中的局限性,是现代Web应用的核心技术之一。原创 2025-08-01 01:03:29 · 1278 阅读 · 0 评论 -
【网络编程】WebSocket C++服务器搭建
WebSocket是一种基于TCP的全双工通信协议,解决了HTTP在实时通信中的局限性。相比HTTP的单向请求-响应模式,WebSocket支持低延迟的双向持续数据交互,适用于聊天、在线游戏等实时场景。文章介绍了WebSocket++库的安装方法,包括下载头文件并复制到系统路径,以及配置兼容的Boost库(推荐1.7.0以下版本)。最后展示了一个改造后的echo服务器示例代码,该服务器能保存所有客户端连接并广播消息,核心功能包括连接管理、消息处理和广播发送。编译时需链接boost_system和boost_原创 2025-07-31 02:34:57 · 1275 阅读 · 0 评论 -
【网络编程】字节序-大端和小端
摘要: 大端存储(高位字节在前)和小端存储(低位字节在前)是数据在内存中的两种存储方式。大端更符合人类阅读习惯,而小端在x86架构中更常见。可通过C++代码检测系统字节序:使用指针检查最低有效字节位置(方法1)或利用union联合体共享内存(方法2)。处理字节序转换时,可手动位操作、使用POSIX标准函数(htonl/ntohl)、C++20的std::endian或Boost库的boost::endian。网络通信中需统一字节序以避免数据解析错误。原创 2025-07-28 03:20:31 · 652 阅读 · 0 评论 -
【网络编程】TCP的三次握手和四次挥手
TCP协议详解:连接管理与抓包分析 TCP是一种面向连接、可靠的传输协议,通过三次握手建立连接(SYN→SYN-ACK→ACK)和四次挥手断开连接(FIN→ACK→FIN→ACK)。其核心机制包括序列号确认、超时重传和流量控制,确保数据可靠传输。 抓包分析示例:Wireshark捕获的三次握手数据包显示: SYN包(客户端→服务器):源端口61282,目的端口80,Seq=0,窗口8192字节。 SYN-ACK包(服务器→客户端):Seq=0,Ack=1,窗口29184字节,含MSS和窗口缩放选项。 ACK原创 2025-07-28 03:18:51 · 923 阅读 · 0 评论 -
【网络编程】TCP协议和包头解析
TCP(传输控制协议)是一种面向连接的可靠传输协议,通过序号/确认机制、超时重传、流量控制和拥塞控制等机制确保数据准确传输。其包头格式包含源/目的端口、序号/确认号、数据偏移、控制标志(如SYN/ACK)、窗口大小、校验和等字段,支持可变长度选项。示例展示了典型TCP包头结构(如HTTP连接的80端口),包含各项字段的16进制表示。TCP的可靠性源于其完善的错误检测、数据排序和传输控制机制,是互联网通信的核心协议之一。原创 2025-07-28 03:13:52 · 964 阅读 · 0 评论 -
【网络编程】网络传输-protobuf
摘要: Protocol Buffers(Protobuf)是Google开发的高效跨语言数据序列化工具,通过.proto文件定义数据结构并生成对应语言代码,支持多种编程语言。其工作原理包括定义数据结构、使用protoc编译生成代码,并通过序列化接口实现数据转换。配置步骤包括下载源码、编译安装、设置环境变量。使用示例展示了从定义.proto文件到生成代码、赋值及序列化的完整流程。Protobuf通过二进制编码实现高效数据传输,适用于分布式系统等场景。原创 2025-07-21 19:48:09 · 1585 阅读 · 0 评论 -
【网络编程】网络传输-JSON
JSON是一种轻量级的数据交换格式,具有简洁、易读、跨语言等特点。其基本结构包括对象(键值对集合)和数组(有序列表),支持字符串、数字、布尔值、null等数据类型。JSON广泛应用于前后端通信、服务间数据交换、配置文件等场景。在C++中,可使用nlohmann/json库实现JSON的序列化与反序列化,该库提供类似STL的操作方式,支持嵌套结构和链式调用。JSON凭借其体积小、解析效率高、兼容性强等优势,已成为现代软件开发中重要的数据交换标准。原创 2025-07-20 17:13:20 · 1063 阅读 · 0 评论 -
【网络编程】网络传输-二进制字节流
摘要: 字节流是计算机基础的数据传输形式,由连续的8位二进制字节组成,适用于所有类型数据的底层表示。字节流与字符流的区别在于前者直接处理原始字节,后者需通过字符编码转换。序列化和反序列化是数据转换的核心技术,将结构化数据与二进制字节流相互转换,广泛应用于网络通信和存储。网络协议需考虑字节序(大小端)、内存对齐和可变长字段处理。通过定义传输协议和手动序列化/反序列化代码,可实现高效可靠的数据传输。文中通过具体示例展示了如何序列化基础数据类型和结构体,并按照协议规范进行反序列化还原数据。原创 2025-07-20 15:14:43 · 1119 阅读 · 0 评论 -
【网络】SSL/TLS介绍
SSL/TLS协议是保障网络通信安全的核心技术。SSL由网景公司开发,后演变为更安全的TLS协议,现已成为互联网加密通信标准。TLS在SSL基础上增强了MAC算法、警报机制和规范定义,提供更严密的身份认证、数据加密和完整性保护。其工作原理结合对称加密(高效)和非对称加密(安全密钥分发),通过公钥加密和私钥解密实现安全通信。TLS证书作为公钥与身份的绑定凭证,由CA机构验证签发。TLS握手过程分为四个阶段:客户端发起请求、服务器响应协商、证书验证和密钥交换,最终生成共享密钥建立加密通道。该协议解决了密钥分发难原创 2025-06-29 00:51:23 · 1675 阅读 · 0 评论 -
【网络编程】Https概述
简单来说,https=http+ssl/tls,即加密的httpHTTPS(HyperText Transfer Protocol Secure)是HTTP协议的安全版本,用于在客户端(如浏览器)和服务器之间安全地传输数据。HTTPS通过加密机制来保护用户和网站之间传输的信息,确保数据的机密性和完整性。HTTP:数据以明文形式传输,容易被拦截和篡改,适用于对安全性要求不高的通信。HTTPS:数据加密传输,提供更高的安全性,特别适合保护敏感信息。和是用于在计算机网络中提供安全通信的加密协议。原创 2025-05-22 01:20:10 · 1378 阅读 · 0 评论 -
【网络编程】Http概述与C++简单WebServer
HTTP(超文本传输协议)是用于客户端和服务器之间数据传输的应用层协议,主要用于Web浏览器和服务器之间的通信。它最初设计用于传输HTML文档,现支持多种数据类型。HTTP具有无状态性,每个请求独立,不记录之前的信息,需通过Cookies或Sessions保存状态。HTTP请求过程包括DNS查询、TCP连接、HTTP请求、服务器响应和TCP断开。HTTP协议头分为请求头和响应头,分别包含客户端请求和服务器响应的关键信息。POST与GET是HTTP的两种主要请求方法,区别在于数据传输方式和安全性。HTTP状态原创 2025-05-22 00:47:53 · 1554 阅读 · 0 评论 -
【网络编程】单播、广播、组播、任播
广播(Broadcast)这种网络通信方式,用于将数据从一个节点传输到同一网络中的所有其他节点。广播数据包会被发送到一个特殊的广播地址,网络中的所有设备都会接收到这个数据包,不论设备是否需要该信息。这种通信方式一般用于局域网(LAN)中的信息共享。广播并不是所有的网络都支持,通常 广播只是在局域网中,IPv6也不支持广播。在以太网中使用全1的地址,来代表广播地址。例如:255.255.255.255。在广播中,发送端并不指定特定的接收方,而是将数据包发送到该网络中的所有设备。原创 2025-05-01 01:25:42 · 1113 阅读 · 0 评论 -
【网络编程】UDP协议 和 Socket编程
UDP(User Datagram Protocol,用户数据报协议)是互联网协议套件中的一种传输层协议,与广泛使用的TCP(Transmission Control Protocol,传输控制协议)相比,它是一种的协议。UDP 被用于对传输速度要求较高、但对可靠性要求较低的场景。原创 2025-04-29 23:32:25 · 1897 阅读 · 0 评论 -
【网络编程】socket编程和TCP协议
在头文件中,// 地址族(Address family),即协议类型// 16 位的端口号,网络字节序(大端序)// 32 位的 IPv4 地址// 填充字段,保持与 sockaddr 结构体的大小一致返回值:表示实际接收到的数据字节数,失败时返回-1,并设置errno指示错误。返回值:表示成功发送的字节数,如果出现错误则返回-1,并设置errno来指示错误。send()用于将数据从应用层发送到网络上,通过套接字通信。函数的flags。原创 2025-04-29 17:32:56 · 1515 阅读 · 0 评论 -
【网络编程】ARP协议与主机之间的通信
在A主机和B主机之间的广域网通信中,ARP协议只在本地局域网中用于解析与本地主机或路由器的MAC地址。在跨网段的通信中,每一跳的路由器会重新封装MAC地址。因此,A主机并不需要知道B主机的MAC地址,只需要知道其IP地址以及如何通过路由器进行转发。这是因为在广域网中,数据传输是基于IP地址进行路由的,MAC地址仅用于本地链路(同一局域网)内的设备之间的通信。原创 2025-04-28 14:45:33 · 1022 阅读 · 0 评论 -
【网络编程】TCP/IP四层模型、MAC和IP
网络模型的目的:规范通信标准,确保不同设备和系统之间能够有效通信。原创 2025-04-28 14:44:30 · 1438 阅读 · 0 评论 -
【网络编程】协议和分层
OSI(Open Systems Interconnection Reference Model,开放系统互联基本参考模型),又称七层网络模型。当一段数据data从A主机传输到B主机时,中间的过程涉及多个步骤和协议层,这些步骤共同确保了数据能够准确、可靠地传输。在传输层中有两个重要的协议。TCP、UDP 这是网络编程中的重点协议,是我们后续篇章中要重点学习。原创 2025-04-28 14:38:59 · 781 阅读 · 0 评论 -
【网络编程】HTTP网络编程
HTTP(Hyper Text Transfer Protocol,超文本传输协议)是用于从万维网(WWW:World Wide Web) 服务器(简称Web 服务器)传输超文本到本地浏览器的传送协议,基于TCP/IP 通信协 议来传递数据 (HTML 文件、图片文件、查询结果等)。原创 2025-03-11 12:04:59 · 1337 阅读 · 0 评论 -
【网络编程】完成端口 IOCP
执行一个文件的I/O 操作处理具有关联的I/O 完成端口,在I/O 操作完成时I/O 系统发送 完成通知包到完成端口。其次,我们需要知道,所谓的完成端口其实和 HANDLE 一样,也是一个内核对象, Windows 大师Jeff Richter曾说,“完成端口可能是最为复杂的内核对象了”,但是我们也不 用去管它复杂,因为具体的内部是如何实现的和我们无关,只要我们能够学会用它相关的API 把这个完成端口的框架搭建起来就可以了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。原创 2025-03-10 22:02:03 · 806 阅读 · 0 评论 -
【网络编程】重叠I/O模型
在 Winsock 中,重叠 I/O(Overlapped I/O) 模型能达到更佳的系统性能,高于 select 模 型、异步选择和事件选择3种。重叠模型的基本设计原理便是让应用程序使用一个重叠的数据 结 构(WSAOVERLAPPED), 一次投递一个或多个 Winsock I/O 请求。针对这些提交的请求, 在它们完成之后,我们的应用程序会收到通知,于是我们就可以对数据进行处理了。重叠I/O 这个概念来自文件I/O 操作。原创 2025-03-09 23:41:13 · 841 阅读 · 0 评论 -
【网络编程】事件选择模型
事件选择(WSAEventSelect) 模型是另一个有用的异步 I/O 模型。和 WSAAsyncSelect 模 型类似的是,它也允许应用程序在一个或多个套接字上接收以事件为基础的网络事件通知,最 主要的差别在于网络事件会投递至一个事件对象句柄,而非投递到一个窗口例程。原创 2025-03-09 21:30:27 · 971 阅读 · 0 评论 -
【网络编程】WSAAsyncSelect 模型
这也是该模型的一个缺点。(5)为一个FD_READ网络事件不要多次调用recv(函数,如果应用程序为一个FD_READ 网络事件调用多个recv()函数,就会使得该应用程序收到多个FD_READ 网络事件。Windows sockets应用程序在 创建套接字后,调用WSAAsyncSelect 函数注册感兴趣的网络事件,当该事件发生时Windows 窗口收到消息,应用程序就可以对接收到的网络事件进行处理了。尽管应用程序调用上述函数取消了网络事件通知,但是在应用程序消息队列中,可能还有 网络消息在排队。原创 2025-03-09 17:20:57 · 1025 阅读 · 0 评论 -
【网络编程】select模型
我们把监听套接字sListen 放到fdSocket 集合中,但然后阻塞在select 函数,当有请求连 接的时候,select 函数返回,然后调用accept 接受连接,并把客户套接字放到fdSocket 集合中。在调用select 函 数 时 ,readfds 、writefds 和 exceptfds 这3个参数至少有一个为非空,并且 在该非空的参数中,必须至少包含一个套接字,否则select 函数将没有任何套接字可以等待。前面提到,在select函数返回时会在fd set结构中填入相应的套接字。原创 2025-03-09 16:09:12 · 1098 阅读 · 0 评论 -
【网络编程】同步和异步、阻塞和非阻塞,I/O和网络I/O
对于多个线程而言,同步、异步就是线程间的步调是否要一致、是否要协调:要协调线程 之间的执行时机就是线程同步,否则就是异步。对于一个线程的请求调用来讲,同步和异步的区别是是否要等这个请求出最终结果(注意, 不是请求的响应,是提交的请求最终得到的结果)。如果要等最终结果,就是同步;如果不等, 干其他无关事情了,就是异步。原创 2025-03-08 17:08:38 · 1107 阅读 · 0 评论 -
【网络编程】简单的网络服务器设计
不同于客户端程序,服务器端程序需要同时为多个客户端提供服务,及时响应。比如Web 服务器,就要能同时处理不同IP 地址的主机发来的浏览请求,并把网页及时反应给浏览器。因此,开发服务器程序,必须要能实现并发服务能力。这是网络服务器之所以成为服务器的最 本质的特点。这里要注意,有些并发并不是非常需要精确同时。在某些应用场合,比如每次处理客户端 数据量较少的情况下,我们也可以简化服务器的设计。通常来讲,网络服务器的设计模型有循 环服务器、I/O 复用服务器、多线程并发服务器。原创 2025-03-08 15:59:21 · 881 阅读 · 0 评论 -
【网络编程】原始套接字编程
在前两次复制的过程中,不是所有网卡的数据都会复制过去,而是有条件、有选择的,第三次 复制通常是无条件复制。对于第一次复制,协议栈通常会对下列IP 数据包进行复制:(1)UDP 分组或TCP 分组。(2)部分ICMP 分组。注意是“部分”,大家待会会看到这个效果。默认情况下,原始 套接字抓不到ping 包。(3)所有IGMP 分组。(4)IP 首部的协议字段不被协议栈认识的所有IP 包。(5)重组后的IP 分片。原创 2025-03-08 13:31:07 · 1131 阅读 · 0 评论 -
【网络编程】UDP 套接字编程
UDP 套接字就是数据报套接字, 一种无连接的Socket,对应于无连接的UDP 应用。在使 用TCP 编写的应用程序和使用UDP 编写的应用程序之间存在一些本质差异,其原因在于这两 个传输层之间的差别:UDP 是无连接不可靠的数据报协议,不同于TCP 提供的面向连接的可 靠字节流。从资源的角度来看,相对来说UDP 套接字开销较小,因为不需要维持网络连接, 而且无须花费时间来连接,所以UDP 套接字的速度较快。因为UDP 提供的是不可靠服务,所以数据可能会丢失。原创 2024-12-14 16:32:50 · 838 阅读 · 0 评论 -
【网络编程】TCP套接字编程
流式套接字编程针对的是TCP 协议通信,即面向连接的通信,分为服务器端和客户端两 个部分,分别代表两个通信端点。下面看一下流式套接字编程的基本步骤。(1)加载套接字库(使用函数WSAStartup), 创建套接字(使用socket)。(2)绑定套接字到一个IP 地址和一个端口上(使用函数bind)。(3)将套接字设置为监听模式等待连接请求(使用函数listen), 这个套接字就是监听套 接字了。(4)请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。原创 2024-12-10 00:18:18 · 1329 阅读 · 0 评论 -
【网络编程】套接字基础
Windows用户态的网络编程常见的应用主要基于套接字API。套 接 字API 是 Windows提 供的一组网络编程接口。通过它,开发人员既可以在传输层之上进行网络编程,也可以跨越传 输层直接对网络层进行开发。套接字 API 已经是用户态网络编程必须要掌握的内容。套接字 编程可以分为TCP 套接字编程、UDP 套接字编程和原始套接字编程,我们将在后面章节分别 叙述之。原创 2024-12-07 12:22:26 · 984 阅读 · 0 评论 -
【多线程编程】利用Win32API函数进行多线程开发
在用Win32 API线程函数进行开发之前,我们首先要熟悉这些API 函数。常见的与线程 有关的API 函数见表3-2。原创 2024-12-07 01:25:14 · 1143 阅读 · 0 评论 -
【多线程编程】多线程编程的基本概念
怎么解决这个问题呢?现代操作系统大多支持多线程概念,每个进程中至少有一个线程,所以即使没有使用多线程编程技术,进程也含有一个主线程,所以也可以说,CPU中执行的是线程,线程是程序的最小执行单位,是操作系统分配CPU时间的最小实体。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。该类别被称为空闲优先级类别,该类别的进程中的线程只在系统处于空闲的时候才运行,并且这些线程会被更高优先类别的进程中的线程抢占。原创 2024-12-06 21:22:08 · 1006 阅读 · 0 评论 -
【网络编程】获取本机计算机的域名
其中,参数pFixedInfo指向一个缓冲区的指针,该缓冲区包含一个固定的信息结构,该结构接收本地计算机的网络参数(如果函数成功),调用GetNetworkParams函数之前,调用方必须分配正确大小的缓冲区才会获得内容信息,如果该参数为NULL,那么pOutBufLen能获得实际所需要的缓冲区大小;如果函数失败,返回值是错误代码。域名(Domain Name)或称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(或物理位置)。原创 2024-12-04 08:41:31 · 413 阅读 · 0 评论 -
【网络编程】获取本机上支持的网络协议信息
IpdwBuferLength在输入时,传递给WSAEnumProticol的IpProtocolBuffer缓冲区的字节数。输出时,可以传递给WSAEnumProtocols以检索所有请求信息的最小缓冲区大小。如果函数没有出现错误,WSAEnumeProtocols将返回要报告的协议数;否则将返回SOCKET_ERROR的值,并且可以通过调用WSAGetLastError来检索特定的错误代码。可以通过函数WSAEnumeProtocols检索有关可用网络传输协议的信息。原创 2024-12-04 08:35:06 · 455 阅读 · 0 评论 -
【网络编程】获取本机上的UDP统计数据
其中,参数pStats指向MIB_UDPSTATS结构的指针,该结构接收本地计算机的UDP统计信息。如果函数成功,返回NO_ERROR;原创 2024-12-04 01:28:58 · 304 阅读 · 0 评论 -
【网络编程】获取本机上的TCP统计数据
其中,参数pStats指向MIB_TCPSTATS结构的指针,该结构接收本地计算机的TCP统计信息。如果函数成功,返回NO_ERROR;原创 2024-12-04 01:24:12 · 351 阅读 · 0 评论 -
【网络编程】获取本机的DNS地址
其中,参数pFixedInfo指向一个缓冲区的指针,该缓冲区包含一个固定的信息结构,该结构接收本地计算机的网络参数(如果函数成功)。pOutBufLen指向一个ULONG变量的指针,该变量指定固定信息结构的大小。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。当前,对于每一级的域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用去记住能够被机器直接读取的IP数串。原创 2024-12-04 01:16:04 · 313 阅读 · 0 评论 -
【网络编程】获取本地计算机的IP协议统计数据
其中,参数pStats指向MIB_IPSTATS结构的指针,该结构接收本地计算机的IP统计信息。如果函数成功,返回值为NO_ERROR。GetIpStatistics函数返回当前计算机上IPv4的统计信息。如果还需要获得IPv6的IP统计信息,可以使用扩展函数GetIpStatisticsEx。通过函数GetIpStatistics可以获取当前主机的IP协议的统计数据,比如已经收到了多少个数据包。原创 2024-12-04 00:58:55 · 364 阅读 · 0 评论 -
【网络编程】获取本机所有网卡(包括虚拟网卡)的列表和信息
博客中介绍了GetAdaptersInfo这个函数,并且通过它获取了本机的子网IP和子网掩码。原创 2024-12-04 00:48:16 · 425 阅读 · 0 评论 -
【网络编程】获取本机子网IP地址和子网掩码
子网掩码(subnet mask)又叫做网络掩码,地址掩码,用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是计算机的为掩码。子网掩码不能单独存在,必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分为网络地址和主机地址两部分。原创 2024-12-04 00:30:53 · 589 阅读 · 0 评论
分享