Linux:多人聊天室系统实现 - 改版:从功能设计到代码解析
导言在网络编程领域,聊天室系统是一个经典的实践案例,它涵盖了套接字通信、并发处理、数据结构应用等多个核心知识点。本文将从零开始,一步步讲解如何使用 C 语言实现一个支持多人聊天、超时管理和私聊功能的完整聊天室系统,包括服务器端和客户端的实现细节。同时,为了让代码更具可读性和可维护性,会对关键代码段添加详细注释,帮助读者更好地理解每一步的逻辑。 一、系统整体设计与功能规划1.1...
基于多人聊天室系统的实现,学习 setsockopt 函数:从代码到实践
导言在网络通信领域的研究与实践中,套接字选项的配置是网络编程的核心技术环节之一。setsockopt函数作为配置套接字选项的核心接口,其使用机制与应用场景对网络程序性能优化和稳定性保障具有重要意义。本文将结合具体的代码实现,系统探讨setsockopt函数的参数结构、应用方法及典型套接字选项的配置策略。 一、setsockopt 函数的理论基础setsockopt函数定义于sys/socket.h头文件,其函数原型为: 12#include <sys/socket.h>int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); 各参数的语义解析如下: sockfd:表示目标套接字的文件描述符,作为操作对象的唯一标识 level:指定选项所属的协议层次,其中SOL_SOCKET用于通用套接字选项配置,IPPROTO_TCP专用于 TCP...
基于多人聊天室系统的实现,详细学习select 函数基础
一、select 函数基础与定时机制在网络编程中,select函数是一种常用的 I/O 多路复用技术,它允许程序同时监控多个文件描述符,等待其中任何一个变为 "就绪" 状态(可读、可写或异常)。select函数的原型如下: 1234#include <sys/select.h>int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 其中,timeout参数是一个指向struct timeval的指针,用于设置select函数的最大等待时间: 1234struct timeval { long tv_sec; /* 秒 */ long tv_usec; /* 微秒 */}; 这个参数实现了select函数的定时机制,具体分为三种情况: timeout ==...
Linux:基于 select 多路复用的 C 语言多人聊天室实现
一、项目概述与核心功能本聊天室服务器基于 TCP 协议,通过select多路复用技术,实现单线程高效处理多个连接。其核心功能包括: 稳定连接:利用 TCP 协议确保数据传输的可靠性; 高效处理:借助select系统调用,提升服务器并发处理能力; 多样交互:支持群聊和私聊两种模式; 智能管理:设置 30 秒无活动超时机制,自动清理闲置连接; 日志追踪:记录服务器关键事件与客户端活动,便于监控与调试; 控制台广播:管理员可通过控制台向所有在线客户端发送消息。 二、核心技术点 select多路复用:允许单线程同时处理多个文件描述符(如监听套接字、客户端连接和标准输入),降低多线程编程的复杂度与资源消耗。 链表数据结构:采用双向链表动态管理客户端连接信息,便于节点的添加、删除与遍历操作。 TCP socket 编程:完整实现套接字创建、地址绑定、端口监听和连接接受等网络通信核心操作。 时间处理机制:通过高精度时间戳生成函数,实现超时检测与日志记录功能。 三、代码模块解析3.1 时间戳工具函数123456789101112131415// 获取时间戳字符串char*...
基于 TCP 协议的双向通信程序实现与解析
一、整体工作流程本代码实现的内网聊天系统采用经典的客户端 - 服务器(C/S)架构模型。系统运行过程中,服务器端与客户端分别遵循以下工作流程: 服务器端的初始化阶段,依次执行 socket 创建、端口绑定及监听状态设置等操作。随后进入循环监听模式,默认设置 5 秒超时机制等待客户端连接请求。当客户端成功连接后,服务器与客户端进入双向通信状态,双方可通过标准输入输出进行消息交互。客户端断开连接后,服务器将关闭当前连接通道,重新进入待连接状态,以处理后续客户端请求。 客户端在初始化时,通过创建 socket 实例并连接至服务器指定端口建立通信链路。连接成功后,客户端启动消息交互循环,实现用户输入消息的发送与服务器响应消息的接收功能。当满足预设退出条件时,客户端将主动断开与服务器的连接,并安全退出程序。 系统基于 TCP 协议通过 socket 接口建立连接,运用 select 函数实现 I/O...
基于 UDP 协议的双向通信程序实现与解析
引言用户数据报协议(UDP)作为 TCP/IP 协议簇中的核心协议之一,以其无连接、低开销的特性,在实时通信、物联网数据传输等场景中发挥着重要作用。与 TCP 协议的面向连接、可靠传输不同,UDP 协议提供的是一种尽最大努力交付的服务,不保证数据的有序到达和不丢失,这使得其在对实时性要求较高而对可靠性要求相对较低的场景中具有显著优势。 本文将对一套基于 UDP 协议实现的双向通信程序进行深入解析,包括客户端与服务器端的代码结构、关键函数调用、程序运行逻辑以及实际通信案例分析,旨在揭示 UDP 协议在实际编程中的应用方式与技术细节。 一、程序整体架构与设计思路本次分析的程序采用 C 语言编写,基于 Linux 系统的套接字(socket)API 实现,包含客户端和服务器端两个独立的程序模块。两套程序均采用了 I/O 多路复用技术(select 函数)实现标准输入和网络套接字的同时监听,从而实现双向通信功能。 程序的核心设计思路在于: 利用 UDP 协议的无连接特性,无需建立连接即可直接发送数据 通过 select 函数实现 I/O...
Leecode 1089. Duplicate Zeros
1089. Duplicate Zeros题目Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remaining elements to the right. Note that elements beyond the length of the original array are not written. Do the above modifications to the input array in place, do not return anything from your function. Example 1: 123Input: [1,0,2,3,0,4,5,0]Output: nullExplanation: After calling your function, the input array is modified to: [1,0,0,2,3,0,0,4] Example 2: 123Input:...
Leecode 0922. Sort Array By Parity II
922. Sort Array By Parity IIGiven an array of integers nums, half of the integers in nums are odd, and the other half are even. Sort the array so that whenever nums[i] is odd, i is odd, and whenever nums[i] is even, i is even. Return any answer array that satisfies this condition. Example 1: 123Input: nums = [4,2,5,7]Output: [4,5,2,7]Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted. Example 2: 12Input: nums = [2,3]Output: [2,3] 双指针解法: 初始化: 偶数索引指针 i 从 0 开始,每次移动 2...
Leecode 0977. Squares of a Sorted Array
977. Squares of a Sorted ArrayGiven an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order. Example 1: 12Input: [-4,-1,0,3,10]Output: [0,1,9,16,100] Example 2: 12Input: [-7,-3,2,3,11]Output: [4,9,9,49,121] Note: 1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A is sorted in non-decreasing...
TCP 泛洪攻击
一、TCP 协议基础与 Socket 编程框架TCP 作为面向连接的可靠传输层协议,借助三次握手、滑动窗口、超时重传和拥塞控制等机制,保障数据通信的可靠性。在 Linux 系统中,Socket 接口将 TCP 协议细节进行封装,为开发者提供标准的通信接口。 TCP Socket 通信主要分为七个阶段:socket 创建、地址绑定、监听、连接请求处理、数据传输和连接释放 ,每一个系统调用都严格遵循 TCP 状态机规则,确保通信流程的有序进行。 二、泛洪攻击的原理与 TCP 协议脆弱性分析2.1 泛洪攻击的定义与分类泛洪攻击(Flood Attack)属于拒绝服务(DoS)攻击,通过向目标系统发送超量流量或请求,耗尽其资源,导致无法为合法用户服务。在 TCP 协议场景下,攻击者利用协议特性构造恶意请求,破坏服务可用性。 TCP 泛洪攻击主要分为两类: 连接型泛洪攻击:以SYN Flood为代表,攻击者伪造虚假源 IP 的 SYN 请求,使目标服务器在等待 ACK...
《Linux C 语言 TCP Socket 编程详解》学习笔记
一、Socket 编程基础1.1 Socket 概述Socket 作为网络编程接口,构建了异构主机间进程通信的基础框架体系。在 Linux C 开发环境中,其作为网络通信实现的核心技术,通过标准化接口对底层协议进行封装,实现了跨平台的编程能力。从抽象层面来看,Socket 可类比为网络通信中的虚拟通信管道,不同主机间的进程借助这些管道进行数据交互,并遵循统一的通信规则,从而确保异构系统间的兼容性与通信稳定性。 1.2 TCP 与 UDP 协议特性比较传输层协议栈的核心由 TCP 和 UDP 协议构成,二者在连接管理机制、数据传输可靠性以及通信模式等方面存在显著差异: TCP 协议:作为基于字节流的面向连接协议,TCP 通过三次握手机制建立可靠连接,并采用确认应答机制与滑动窗口算法,保障数据传输的完整性与有序性。该协议适用于文件传输、网页浏览等对数据准确性要求严苛的应用场景。 UDP 协议:以数据报为基本传输单元的无连接协议,UDP 不具备数据重传与流量控制机制,因而具有低延迟特性。这种特性使其在视频直播、在线游戏等允许少量数据丢失的实时性场景中得到广泛应用。 二、TCP...
基于协议分析与抓包验证的 HTTP/HTTPS 通信机制研究
导言在网络通信领域,HTTP 协议作为客户端与服务器交互的基石,其运行机制对网络应用的正常运转起着至关重要的作用。本文从协议规范解析出发,结合 Wireshark 抓包分析技术,系统研究 HTTP 协议的报文结构、请求方法、状态码体系,并深入探讨 HTTPS 加密通信的核心原理,为网络通信研究与应用开发提供理论支撑与实践参考。 一、HTTP 协议报文结构解析1.1 请求报文构成 请求行:遵循 请求方法 + 请求资源路径 + HTTP协议版本 的格式。例如,GET / HTTP/1.1 表示通过 GET 方法请求根路径资源,采用 HTTP/1.1 协议版本。 请求头部:以键值对形式传递元数据。其中,Host字段指定目标服务器域名;User-Agent标识客户端应用;Accept与Accept-Encoding分别定义可接受的内容类型及压缩编码格式。 请求正文:主要存在于POST等数据提交请求中,用于承载具体业务数据,GET请求通常无正文内容。 1.2 响应报文结构 状态行:采用 HTTP协议版本 + 状态码 + 状态码描述...
URL:网络资源的精准定位机制
导言在计算机网络的复杂生态系统中,统一资源定位符(Uniform Resource Locator, URL)作为核心基础设施,在网络资源寻址与访问控制中发挥着至关重要的作用。这一标准化的字符序列,依据严格的语法规范,将资源的传输协议、物理位置及访问参数进行系统性编码。其模块化设计不仅确保了资源检索的高效性,更保证了定位的准确性。本文将从协议规范、地址标识、端口分配、路径索引、参数传递及锚点定位六个维度,对 URL 的构成要素及其运行机制展开深入剖析。以https://hespethorn.github.io/为例,其完整结构可解构为传输协议、域名标识、默认端口(隐式省略)、资源路径等核心组件,清晰展现了 URL 对网络资源的精准定位逻辑。 一、协议规范:网络通信的基础框架网络协议作为 URL 的逻辑起点,定义了客户端与服务器之间数据传输的规则体系。不同协议在传输模式、数据格式及安全机制等方面存在显著差异,主要包括以下类别: 1. 超文本传输协议(Hypertext Transfer Protocol, HTTP)作为基于请求 - 响应架构的应用层协议,HTTP 在 Web...
网络理论核心知识整理
一、网络分层:从 OSI 到 TCP/IP 的架构演进1.1 ISO/OSI 七层模型OSI 模型将网络通信划分为七层,构建了标准化的网络通信框架,各层在实际网络交互中扮演着不可或缺的角色: 应用层:直接为用户应用程序提供服务,是用户与网络的接口层。例如,HTTP 协议用于网页数据传输,在浏览器输入网址后,HTTP 协议负责将网页资源从服务器请求并传输到客户端;SMTP 协议则用于电子邮件的发送,实现邮件从发件人服务器到收件人服务器的传输。 表示层:负责数据格式转换与加密解密。当不同系统间进行数据交互时,如 Windows 系统与 Linux 系统,需要表示层将数据转换为双方都能理解的格式;在数据传输安全方面,SSL/TLS 协议就在表示层实现数据加密,保护用户信息不被窃取。 会话层:管理应用程序间的会话连接。以在线购物为例,用户从浏览商品到下单付款的整个过程,会话层会维持用户与服务器之间的会话,确保交易流程的连续性和正确性。 传输层:保障端到端的数据传输,核心协议 TCP 和 UDP 有不同的应用场景。TCP...
Leecode 0905. Sort Array By Parity
905. Sort Array By ParityGiven an integer array nums, move all the even integers at the beginning of the array followed by all the odd integers. Return any array that satisfies this condition. Example 1: 123Input: nums = [3,1,2,4]Output: [2,4,3,1]Explanation: The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted. Example 2: 12Input: nums = [0]Output: [0] 解法1:双指针12345678910111213141516class Solution{public: vector<int> sortArrayByParity(vector<int>...
Leecode 0904. Fruit Into Baskets
904. Fruit Into Baskets题目In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: Add one piece of fruit from this tree to your baskets. If you cannot, stop. Move to the next tree to the right of the current tree. If there is no tree to the right, stop. Note that you do not have any choice after the initial choice of starting tree: you must perform step 1, then step 2, then back to step 1, then...
Leecode 0844. Backspace String Compare
844. Backspace String Compare题目Given two strings S and T, return if they are equal when both are typed into empty text editors. # means a backspace character. Example 1: 123Input: S = "ab#c", T = "ad#c"Output: trueExplanation: Both S and T become "ac". Example 2: 123Input: S = "ab##", T = "c#d#"Output: trueExplanation: Both S and T become "". Example 3: 123Input: S = "a##c", T = "#a#c"Output: trueExplanation:...
TCP 与 UDP 协议对比:抓包视角下的特性与应用分析
导言在 TCP/IP 协议簇的传输层体系中,传输控制协议(Transmission Control Protocol, TCP)与用户数据报协议(User Datagram Protocol, UDP)作为两种核心通信协议,分别承担着差异化的网络传输任务。本研究基于 Wireshark 等专业网络抓包工具采集的实证数据,系统性探究两种协议的技术架构、运行机制及其典型应用场景。 一、传输层协议概述作为 OSI 七层模型的关键层级,传输层承担着端到端数据传输管理的核心职能,涵盖数据分段重组、传输可靠性保障、流量控制等重要功能。TCP 与 UDP 作为传输层的核心协议,其设计理念存在本质差异,这种差异性直接影响其在不同网络环境中的适用性。 TCP 协议采用面向连接的通信模式,通过三次握手机制建立连接,四次挥手过程释放连接,从而实现数据的可靠传输。与之相对,UDP 协议采用无连接设计,省略连接建立与释放流程,仅负责将应用层数据封装为数据报进行传输,不保证数据的有序性与完整性。 二、TCP 协议的技术特性与抓包分析2.1 核心技术机制TCP...
HTTP 无状态性相关概念详解
一、无状态与有状态1.1 无状态无状态性体现为服务器在完成单次请求处理后,不保存任何与该事务相关的上下文信息。每个 HTTP 请求均被视为独立的原子操作,服务器响应过程完全依赖当前请求携带的信息,而不依赖先前请求产生的历史数据。 以淘宝网首页为例,用户首次请求时,服务器依推荐算法生成商品推荐与活动界面;页面刷新时,服务器将新请求视为全新事务,重新检索数据并渲染页面,不参考历史访问记录。这种设计契合无状态协议原则,有效提升前端服务器集群并发处理能力,减少服务器资源消耗,适用于高并发场景。 无状态设计简化服务器逻辑,降低复杂度。在淘宝每日亿级用户访问首页的场景下,若记录用户历史与会话状态,将消耗大量内存与计算资源。无状态设计使服务器独立处理每个请求,故障时其他服务器可快速接管,不影响服务,也便于系统扩展维护,新服务器无需同步历史数据即可参与请求处理。 1.2 有状态与无状态协议不同,有状态通信机制需服务器维护客户端会话状态,包括身份认证、操作记录、交易进度等核心数据。 以支付宝转账为例,系统将交易状态(处理中 / 已完成 /...
Leecode 0704. Binary Search
704. Binary Search题目Given a sorted (in ascending order) integer array nums of n elements and a target value, write a function to search target in nums. If target exists, then return its index, otherwise return -1. Example 1: Input: nums = [-1,0,3,5,9,12], target = 9 Output: 4 Explanation: 9 exists in nums and its index is 4 Example 2: Input: nums = [-1,0,3,5,9,12], target = 2 Output: -1 Explanation: 2 does not exist in nums so return -1 Note: You may assume that all elements in nums are...