- 博客(44)
- 收藏
- 关注
原创 C语言多进程TCP服务器与客户端
本文介绍了使用C语言实现多进程TCP服务器和客户端的关键技术。服务器端通过fork()创建子进程处理并发连接,使用SIGCHLD信号和sigaction()函数避免僵尸进程,并详细说明了套接字管理机制。客户端则利用多进程模拟并发请求,展示请求定制和响应处理流程。文章还涵盖了系统测试优化方法,包括进程池、连接复用等技术,并探讨了安全增强措施和应用扩展方向。这种多进程模型虽然资源消耗较大,但在稳定性和隔离性方面具有优势,适合高可靠性网络服务开发。
2025-06-13 10:33:13
351
原创 优雅的断开套接字连接
摘要:本文详细探讨了TCP/UDP连接的优雅断开机制。重点介绍了TCP半关闭(shutdown)的概念与实现方法,包括SHUT_RD、SHUT_WR和SHUT_RDWR三种关闭模式的使用场景。文章还涉及SO_LINGER选项的应用技巧,以及跨平台实现、错误处理、性能优化等高级话题。针对不同协议(TCP/UDP)和场景(阻塞/非阻塞、多线程、HTTP等)提供了具体的关闭方案,并给出了完整的代码示例。最后介绍了连接池管理和批量关闭等优化技术,为开发者提供了全面的网络连接关闭最佳实践指南。
2025-06-12 15:22:44
977
原创 已连接(connected)UDP和未连接(unconnected)UDP的区别
摘要: 已连接和未连接UDP的主要区别在于目标地址的绑定方式。未连接UDP(默认)每次发送需指定地址(sendto),可接收任意来源数据(recvfrom),但性能较低。已连接UDP通过connect()绑定固定地址,之后使用send/recv,仅能与该地址通信,性能更优且能接收异步错误(如ICMP)。适用场景:未连接UDP适合多目标通信(如DNS),已连接UDP适合固定对端的高效通信(如实时音视频)。connect()仅记录地址,不改变UDP无连接本质,可多次调用或通过AF_UNSPEC断开。注意已连接U
2025-06-12 14:24:39
562
原创 网络地址初始化(sockaddr_in初始化)、bind()函数详解
本文介绍了网络编程中socket地址初始化的两种方法以及bind函数:1) 通过指定IP地址(inet_addr/aton)和端口号(atoi+htons)初始化sockaddr_in结构体;2) 使用INADDR_ANY自动获取本机IP地址,适用于服务器端程序,允许从多个IP接收数据。主要涉及arpa/inet.h中的网络地址转换函数(inet_addr、htonl等)和端口号处理,其中服务器端推荐使用INADDR_ANY简化配置,而客户端通常需要明确指定IP地址。
2025-06-12 11:26:22
65
原创 inet_addr()和inet_aton()函数详解
【摘要】inet_addr()和inet_aton()是用于IPv4地址转换的函数,均将点分十进制字符串转为32位网络字节序二进制值。inet_addr()直接返回数值,出错返回INADDR_NONE(-1),但处理255.255.255.255时可能冲突;inet_aton()通过参数返回结果并明确返回1/0表示成功/失败,更安全可靠。示例显示两者对有效地址(192.168.1.110)均转换成功,但对无效地址(192.168.2.266)都能正确报错。建议优先使用inet_aton()。
2025-06-12 10:47:10
175
原创 地址位与数据位、大端和小端字节序、字节序转换
摘要:计算机系统中,地址位和数据位是内存操作的基础。地址位(n位)决定可寻址空间(2^n),32位系统支持4GB,64位系统支持16EB。数据位表示存储的实际内容,总线宽度影响单次传输量。多字节数据存储涉及字节序问题:大端序(最高有效字节在低地址,如网络传输)和小端序(最低有效字节在低地址,如x86架构)。编程中需使用htons/htonl等函数进行主机序与网络序转换,确保跨平台数据一致性。理解这些概念对底层开发、网络编程及跨平台兼容至关重要,字节序差异是数据传输和文件格式处理的关键考量因素。
2025-06-12 09:45:51
473
原创 套接字类型与协议设置
摘要:socket()函数是创建网络套接字的核心接口,其三个关键参数决定通信方式:(1)domain指定协议族(如PF_INET/PF_INET6);(2)type选择套接字类型(SOCK_STREAM对应TCP可靠连接,SOCK_DGRAM对应UDP无连接);(3)protocol通常设为0自动匹配协议。不同参数组合会确定最终的通信协议,如PF_INET+SOCK_STREAM默认使用TCP,而PF_INET+SOCK_DGRAM则使用UDP。该函数通过灵活的参数配置支持多种网络通信需求。
2025-06-11 17:33:10
397
原创 Windows平台网络通信
本文介绍了Windows平台下使用Winsock2进行网络编程的基本步骤。首先需要配置开发环境,在Visual Studio 2008中导入winsock2.h头文件并链接ws2_32.lib库。其次详细说明了WSAStartup初始化函数的使用方法,包括版本号设置和错误处理。文章还列举了Windows系统中常用的套接字相关函数,如socket、bind、listen、accept等,并提供了客户端和服务端的实例。服务端示例中展示了基本的TCP通信流程
2025-06-11 16:56:48
167
原创 QgraphicsView异步线程加载地图瓦片
本节主要记录一下qt开发过程中离线地图瓦片的加载方式,瓦片加载选择graphicsView控件,同时为了不影响主线程事件和其他操作,这里采用了异步线程的操作,将地图瓦片加载的步骤放到了异步子线程之中。
2025-04-28 14:47:07
361
原创 QT文本框(QTextEdit)设置内容只可复制粘贴
今天记录一下在qt开发过程中文本框编辑模式的知识。在创建了一个窗口使用控件的时候,因为我的设计需求,要求在使用过程中,文本框里面的数据,但是。实现设计:添加事件过滤器,选择过滤控件中的对应按键操作,从而实现该目的。
2025-04-25 14:52:28
214
原创 QT创建线程,QT多线程的创建和使用,QT线程池
1. **UI响应性:**- 在单线程模型中,如果需要执行长时间运行的任务(如网络请求、文件I/O、计算密集型操作等),这将会阻塞主线程,导致UI无响应。通过在单独的线程中执行这些任务,可以确保主线程保持响应性,提高用户体验。2. **利用多核处理器:**- 多线程允许应用程序利用多核处理器的性能优势。通过并行执行任务,可以提高应用程序的性能和效率。3. **任务分离:**- 将不同任务放在不同线程中可以更好地组织和管理代码,提高代码的可读性和维护性。4. **避免阻塞:**
2024-09-25 18:19:29
1627
原创 Qt文件编程QFile编程
构造函数、设置文件名、打开文件、关闭文件、读取文本文件,函数(1):(read函数)函数(2):(readLine函数)、从文件中读取二进制数、写入文本文件、写入二进制文件、判断文件是否存在、获取文件名、返回文件大小、删除文件、重命名文件、复制文件
2024-09-23 13:59:53
963
原创 Ubuntu命令Linux系统(vi编辑器方向键错误,删除键没反应,挂载U盘,绑定USB口等)
vi编辑器方向键错误,删除键没反应,挂载U盘,绑定USB口等
2024-09-19 13:54:27
608
原创 QT数据库操作、SQLite数据库操作
(1):QSQL (包含整个QtSQL模块中使用的各种标识符)(2):QSqlDriverCreatorBase (SQL驱动程序工厂的基类)(3):QSqlDriverCreator (模板类,为特定的驱动程序类型提供SQL驱动程序工厂)(4):QSqlDatabase (表示与数据库的连接)
2024-09-19 13:48:32
1295
原创 Python高级二
异常、常见异常类型,目录的创建,目录下文件的显示和分类,文件操作、open函数介绍的引用,open函数打开文件的权限设置,读取文件内容,向文件写入数据,with的用法,多线程的创建和使用,多进程的创建示例,锁的使用,管道的定义和使用
2024-03-11 19:40:18
1159
原创 Python高级一
Python面向对象, 类和对象的关系、类的定义,对象的定义,类的创建和使用,self介绍,对象的添加,魔法方法的介绍,构造器和析构器的定义和使用,类的继承,单继承,多继承,私有继承,私有继承的 @property用法
2024-03-07 20:26:40
992
原创 Python基础二
变量的定义,全局变量、局部变量,函数的定义,函数的调用,函数的参数及返回值,lambda匿名函数,range函数的使用,累加求和,列表的排序,成员函数sort()的使用,内置函数sorted()的使用,九九乘法表的书写
2024-03-06 19:48:05
1011
原创 Python基础一
Python基础,运算符,print打印输出函数、赋值、input函数的使用,标准数据类型,数字类型的应用,数字类型的转换,数学函数的使用,字符串类型的定义、使用、切片和转换,元组的定义及应用,列表的定义、创建、增删改查操作,字典的创建,定义,字典的增删改查
2024-03-06 19:09:20
961
原创 系统移植,GNU命令,Uboot移植
把程序地址转换为文件名和行号 做·调试2、ar建立,修改,提取归档文件3、Id:GNU链接器4、as主要用来编译GNU编译器gcc输出的汇编文件,产生的目标文件由链接器Id链接 类似于gcc -c5、objcopy/arm-linux-objcopy(文件格式转换)6、objdump显示一个或者更多目标文件的信息,主要用于反编译eg:sudo dmesg -c //记录日志./a.outsudo dmesg // 查看日至信息如下。
2024-01-24 19:03:57
1295
原创 系统移植及相关介绍
系统移植(System Porting)是将一个操作系统从一种硬件平台迁移到另一种硬件平台的过程。这个过程涉及将操作系统的内核和相关的软件组件调整和适配到新的硬件环境中。
2024-01-23 19:19:58
2077
1
原创 QT(二):Qt相关控件的使用和设置,Qt对话框的使用,画图事件的创建和设置,线程和锁的创建利用,网络编程,TCP和UDP客户端及服务器的创建,SQLITE数据库,QTableWidget控件的使用
Qt相关控件的使用和设置,Qt对话框的使用,画图事件的创建和设置,线程和锁的创建利用,网络编程,TCP和UDP客户端及服务器的创建,SQLITE数据库中对数据的增、删、改、查操作,QTableWidget控件的使用
2024-01-10 19:49:13
957
原创 QT(一):Qt基础、简介、可视化工具、lupdate、lrelease、qmake、uic、moc、QT内存管理、QWidget界面设置函数、信号与槽、槽函数、自定义槽函数、自定义信号、信号与槽的连
Qt基础、简介、可视化工具、lupdate、lrelease、qmake、uic、moc、QT内存管理、QWidget界面设置函数、信号与槽、槽函数、自定义槽函数、自定义信号、信号与槽的连
2023-12-29 19:13:48
1363
1
原创 C++学习八:STL:容器、算法、迭代器、空间配置器、配接器、仿函数,组件间的关系,STL序列容器、vector、deque、list、vector向量
STL:容器、算法、迭代器、空间配置器、配接器、仿函数,组件间的关系,STL序列容器、vector、deque、list、vector向量
2023-12-28 13:32:27
1303
1
原创 C++学习七:异常处理、转换函数、智能指针
一.异常处理1.核心思想2.C++的异常处理机制有3部分组成3.异常语法形式4.自定义异常二.转换函数1.目的⒉.语法形式3.explicit关键字4.C++标准转换函数1)reinterpret_cast2)const_cast3)static_cast(普通类类型转换)4)dynamic_cast(有虚函数的类型转换)5.自定义转换函数三.智能指针1.shared_ptr指针2.unique_ptr指针(独享指针)3.weak_ptr(弱指针)
2023-12-25 14:58:52
1024
原创 C++学习六:多态、虚函数、虚函数的限制、成员函数覆盖,隐藏,重载、动态链接、虚函数表、抽象类、纯虚函数、虚继承、虚析构函数、限制构造函数
多态、虚函数、虚函数的限制、成员函数覆盖,隐藏,重载、动态链接、虚函数表、抽象类、纯虚函数、虚继承、虚析构函数、限制构造函数
2023-12-21 17:07:36
1056
原创 C++学习五:类继承、基类(父类)和派生类(子类)、公有继承(public继承)、私有继承(private继承)、保护继承(protected继承)、子类构造函数和析构函数、is-a、has-a关系。
类继承、基类(父类)和派生类(子类)、公有继承(public继承)、私有继承(private继承)、保护继承(protected继承)、子类构造函数和析构函数、is-a关系、has-a关系。,多重继承。
2023-12-20 16:09:34
2057
1
原创 C++学习三:一.运算符重载、1.语法形式、可以被重载的运算符、2)不被重载的运算符;二.友元运算符重载、语法形式;三.成员运算符重载1.理解2.语法形式;四、运算符重载的注意事项
一.运算符重载1.语法形式2.注意1)可以被重载的运算符2)不被重载的运算符二.友元运算符重载1.理解2.语法形式三.成员运算符重载1.理解2.语法形式四、运算符重载的注意事项
2023-12-18 18:45:30
909
1
原创 C++学习二 :static关键字、const关键字、友元函数、友元成员函数、友元类
static关键字、C语言中static的用法、C++中static的用法、static成员变量const关键字、C中const的用法、const修饰变量、const修饰指针、C++中const的用法、const修饰成员变量、const成员函数、const对象友元函数、友元成员函数、友元类
2023-12-18 17:30:00
1207
1
原创 C++学习一
一.兼容和差异1.引用2.函数重载1)概念3.函数默认参数4.结构体5.名字空间6.变量的链接性7.函数的链接性8.动态内存1)new/delete运算符2)new [] /delete []运算符二.输入输出流1.功能2.cout 输出流对象三、类和对象1.OOP思想的三大特征2.类和对象1)类2)对象3.语法权限说明:4.构造函数5.析构函数6.构造函数和析构函数的顺序7.this指针8.拷贝构造函数
2023-12-18 17:12:02
1827
1
原创 C++基础
C++简介,Linux下开发C++(Ubuntu)、安装g++、创建C++文件、编译C++文件、"hello world"示例C++特点,新增特性,面向对象编程,类和对象,构造函数和析构函数,继承和多态 运算符重载,异常处理,标准模板库(STL),命名空间、OOP(Object-Oriented Programming)对象(Object)类(Class)封装(Encapsulation)继承(Inheritance)组合(Composition)、多态(Polymorphism)、动态绑定(Dynamic
2023-12-13 17:14:55
1050
原创 Linux网络编程数据库的使用和创建
Linux系统下sqlite3数据库的基本操作:创建、删除、插入、查看、更新;sqlite编程接口、sqlite3_exec函数的介绍和使用,typedef int (*sqlite3_callback)(void *arg, int,char **, char **)函数的介绍和使用、int sqlite3_open(char *path, sqlite3 **db);int sqlite3_close(sqlite3*db);sqlite3数据库的下载和使用。
2023-12-07 20:27:44
1392
1
原创 Linux网络编程广播/组播创建和设置
获取/设置套接字属性,getsockopt函数、setsockopt函数,网络属性设置,网络地址分类,广播和组播,广播:发送方/接收方的创建和设置,组播:发送方/接收方的创建和设置
2023-12-06 18:50:27
3123
1
原创 网络编程UDP客户端、服务端的搭建
运用UDP协议创建客户端和服务器,实现客户端发送消息到服务器,recvfrom函数讲解、sendto函数讲解,客户端代码,服务器代码,多用户聊天系统设置,多用户链接
2023-12-04 14:37:05
792
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人