- 博客(104)
- 收藏
- 关注
原创 Tcp网络通信的基本流程梳理
我的理解是客户端相当于一个想入住酒店的旅客,套接字就相当于房卡,有了这张房卡旅客才能知道楼层和具体房间在哪里。需要注意的是,服务端一般有俩个描述符,一个用于连接和监听,一个用于通信,这里用。函数会阻塞直到有连接到来,然后返回一个新的套接字用于与该客户端进行数据通信,同时获取客户端的地址信息(包括 IP 地址和端口号)。函数将创建的套接字与指定的 IP 地址和端口进行绑定,向操作系统表明服务端要监听该地址和端口上的连接请求。函数创建的套接字就是用于和客户端建立连接和监听客户端的连接请求的。
2025-03-14 21:14:36
459
原创 IDE 使用技巧与插件推荐:全面提升开发效率
在软件开发领域,集成开发环境(IDE)已成为开发者不可或缺的工具。它集代码编辑、编译、调试、版本控制等多种功能于一身,极大地提升了开发效率。然而,许多开发者可能并未充分挖掘 IDE 的潜力。通过掌握一些实用的使用技巧,并合理利用插件扩展功能,能让 IDE 更好地服务于开发工作。本文将介绍主流 IDE 通用的使用技巧,并针对不同类型的开发推荐一些实用插件。
2025-03-13 22:16:28
1169
原创 回顾一下c++11的智能指针:为什么要引入智能指针?智能指针有哪几种类型以及各自的使用方式
适用于资源独占的场景,确保同一时间只有一个对象拥有资源的所有权。适用于资源共享的场景,多个对象可以共享同一个资源的所有权。主要用于解决的循环引用问题,以及在不影响对象生命周期的情况下跟踪对象的存在。通过合理使用这三种智能指针,可以有效地避免动态内存管理中的常见错误,提高代码的安全性和可维护性。
2025-03-13 22:10:47
1327
原创 c++的stl中有哪几种map容器,都有什么应用场景?
在 C++ STL(标准模板库)中,有四种与 相关的容器,分别是 、、 和 ,下面将详细介绍它们的特点和应用场景。综上所述,选择使用哪种 容器取决于具体的应用场景,需要综合考虑元素的顺序要求、键的唯一性以及对查找、插入和删除操作的性能要求等因素。
2025-03-12 20:43:25
376
原创 回顾一下GCC编译和gdb调试以及使用过程中常踩的坑
GDB 是 GNU 项目下的一个强大的调试工具,它可以帮助开发者定位和解决程序中的错误。通过 GDB,开发者可以在程序运行过程中暂停程序的执行,查看变量的值、调用栈信息等,从而找出程序中的问题所在。来编译 C++ 代码,它是 GCC 中专门用于编译 C++ 程序的前端。命令来继续执行程序,直到下一个断点或程序结束。命令来运行程序,程序会在遇到断点时暂停执行。命令在指定的行号或函数处设置断点。选项用于指定输出的可执行文件的名称,命令来查看变量的值,使用。是要编译的 C 源文件。指定了库文件的搜索路径,
2025-03-12 20:41:16
782
原创 回顾一下Qt的多线程技术以及实际开发常用场景
在 Qt 中,多线程编程是一项重要的技术,它允许程序同时执行多个任务,从而提高程序的性能和响应能力。下面将详细介绍 Qt 中的多线程编程,包括相关类、使用方法以及实际运用场景例子。
2025-03-11 20:10:41
424
原创 linux网络编程中bind函数和accept函数的作用以及它们的第一次参数描述符的联系以及返回值的区别
函数用于将一个套接字(socket)与特定的地址和端口绑定,这样客户端就可以通过该地址和端口找到并连接到服务器。函数用于从监听队列中取出一个客户端的连接请求,并创建一个新的套接字来与该客户端进行通信。函数的第一个参数描述符通常是一样的,它们都指向用于监听客户端连接请求的套接字。函数返回的新套接字描述符则用于与具体的客户端进行数据交互。函数的第一个参数描述符和。
2025-03-10 20:40:51
1265
原创 QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL Q
使用vs+qt连接mysql数据库时报错该如何解决?首先使用qDebug()<<QSqlDatabase::drivers();命令看看有没有安装mysql驱动编译器的输出为没看到QMYSQL,说明没有安装这个驱动当 Qt 应用程序没有找到QMYSQL驱动时,往往是因为 MySQL 驱动未被编译,下面详细解释手动编译 MySQL 驱动的步骤及原理。
2025-03-10 20:34:19
1078
原创 介绍一下Qt 中的QSizePolicy 布局策略
在 Qt 中,类用于描述一个控件在布局中如何分配空间,它定义了控件在水平和垂直方向上对空间的需求和响应策略。以下是对。
2025-03-09 20:02:25
362
原创 介绍一下Qt中的事件过滤
在 Qt 中,事件过滤(Event Filter)是一种强大的机制,它允许一个对象拦截并处理另一个对象接收到的事件。通过事件过滤,可以在事件到达目标对象之前对其进行监控和修改,这在很多场景下都非常有用,比如全局的事件处理、拦截特定对象的特定事件等。
2025-03-08 21:32:36
363
原创 整理了一下网络编程中TCP的状态
这些 TCP 状态的转换是通过 TCP 协议的三次握手和四次挥手过程来实现的,它们确保了网络连接的可靠建立和关闭,以及数据的可靠传输。
2025-03-08 19:15:31
601
原创 介绍一下Qt中的动态属性
在 Qt 中,动态属性是一种强大且灵活的特性,它允许你在运行时为对象添加、修改和查询属性,而不需要在类的定义中预先声明这些属性。
2025-03-07 21:26:27
499
原创 详解linux中的fork函数
在上述代码中,通过 fork 创建子进程,然后根据 fork 的返回值判断当前是父进程还是子进程,并分别执行相应的代码块。在这里我们需要特别明确的一点就是。
2025-03-07 19:48:40
802
原创 客户端的ip和端口的发送,存储位置和服务端的ip和端口的绑定
不过,在网络协议栈层面,会记录客户端套接字对应的 IP 地址和端口号,以便进行数据的收发和连接管理。在服务端,需要将套接字与特定的 IP 地址和端口号进行绑定,这样客户端才能通过该 IP 地址和端口号找到并连接到服务器。函数成功接受一个客户端连接时,操作系统会从接收到的 TCP 连接请求报文中提取客户端的 IP 地址和端口号信息,并将其填充到。函数时,操作系统会将客户端的 IP 地址和动态分配的端口号封装在 TCP 连接请求(SYN 报文)中。函数接受客户端连接时,会获取客户端的 IP 地址和端口号信息。
2025-03-06 19:16:06
1139
原创 socket描述符的本质,它可以和服务器建立连接?一个服务器和一个客户端的通信中,三个操作符的作用分别是什么?
在服务器端,通常会使用至少两个 socket 描述符来完成与客户端的通信,分别是监听 socket 描述符和连接 socket 描述符。socket 描述符(socket descriptor)是可以用于和服务器建立连接的。就是监听 socket 描述符,它的作用是绑定服务器的地址和端口,并开始监听客户端的连接请求。函数创建一个 socket 描述符,这个描述符代表了客户端用于网络通信的端点。就是连接 socket 描述符,它代表了服务器与特定客户端之间的连接。就是客户端创建的 socket 描述符,
2025-03-06 18:57:33
824
原创 Detected memory leaks!Dumping objects ->{123} normal block at 0x00A3B450, 4 bytes long. Data: <
检测到了内存泄漏,有一个 4 字节的内存块没有被释放。
2025-03-05 21:01:34
315
原创 计算机七层网络协议和tcp/ic协议的内容和各层常用协议
数据没有封装之前是不能再网络传输的,要怎么进行封装就要根据网络协议进行规范的封装了计算机网络中通常所说的七层网络协议是指 OSI(Open System Interconnection)参考模型,它将网络通信的功能划分为七个层次,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
2025-03-05 20:54:19
701
原创 ‘QDesktopWidget::availableGeometry‘: Use QGuiApplication::screens()
这是旧的获取桌面可用区域的方式,因此编译器会给出相应的警告或错误提示。来替代获取桌面相关信息。类已被标记为过时,推荐使用。原本获取桌面相关信息的代码。在较新的 Qt 版本中,
2025-03-04 22:21:58
180
原创 详解qt的事件处理机制,为什么有时处理事件时要返回给父类处理事件?
这是一个鼠标事件,当我子类把这个事件在当前对象中处理完,剩下的操作就由父类完成,这是事件处理的一个机制Qt 事件处理机制是 Qt 框架中非常核心且重要的一部分,它负责管理和分发各种用户操作(如鼠标点击、键盘输入等)以及系统事件(如窗口大小改变、定时器超时等)。下面将详细介绍 Qt 事件处理机制。
2025-03-04 18:54:17
371
原创 Qt中如何从头到尾自定义设计一个标题栏
使用qt的widget自定义设计标题栏。实现:TitleBar.cpp。可以拖动,也可以最大化和最小化。头文件TitleBar.h。
2025-03-04 18:47:05
259
原创 c++面试常见问题:虚表指针存在于内存哪个分区
当对象是在栈上创建的局部对象时,虚表指针会随着对象一起被分配到栈区。当对象是全局对象或者静态对象时,虚表指针会存储在全局 / 静态存储区。虚表(vtable)通常存储在只读数据段(RODATA),这是因为虚表中的内容在程序运行期间是固定不变的,包含了类的虚函数的地址等信息,将其放在只读数据段可以保证数据的安全性和共享性。运算符在堆上创建的,其虚表指针也会存储在堆区,直到使用。是静态对象,它们的虚表指针都存储在全局 / 静态存储区。是在栈上创建的,该对象包含的虚表指针也会存储在栈区。
2025-03-02 23:27:19
258
原创 c++中所有构造函数的介绍与使用
C++ 中,构造函数是一种特殊的成员函数,用于在创建对象时对对象进行初始化。C++ 中有多种类型的构造函数,下面详细介绍这些构造函数及其特点和使用场景。
2025-03-02 23:21:27
469
原创 c++中深拷贝和浅拷贝的联系和区别
在 C++ 编程里,深拷贝和浅拷贝是两种不同的对象复制方式,它们在实现方式、资源管理和适用场景等方面存在显著差异。下面为你详细介绍它们的区别。
2025-03-01 16:20:20
300
原创 在传递函数参数时,什么时候该使用指针,什么时候该使用引用呢?
在 C++ 里传递函数参数时,指针和引用都能实现让函数操作外部变量,但使用场景有所不同。以下从多个方面来分析何时使用指针,何时使用引用。
2025-03-01 13:23:18
203
原创 c++中初始化列表的使用
在 C++ 中,初始化列表是在构造函数的定义中,用于对类的成员变量进行初始化的一种方式。它紧跟在构造函数的参数列表之后,使用冒号分隔,各成员变量的初始化用逗号分隔。下面详细介绍初始化列表及其参数的含义。
2025-02-28 21:12:13
190
原创 c++面试常见问题:C ++内存管理
内存泄漏指的是程序在动态分配内存后,由于某种原因未能正确释放这些内存,导致这部分内存无法被再次使用。常见的原因包括忘记调用。智能指针是 C++ 标准库提供的模板类,用于自动管理动态分配的内存,避免手动管理内存带来的问题。悬空指针是指指向已经被释放的内存的指针。使用悬空指针会导致未定义行为。为避免悬空指针问题,在释放内存后将指针置为。,或者在异常处理中没有正确释放内存。),它们会自动管理内存的生命周期。为避免内存泄漏,可以使用智能指针(如。
2025-02-27 15:30:23
1278
原创 c++中的虚函数,虚函数表和虚函数指针
在 C++ 中,虚函数是实现多态性的重要机制,它允许在运行时根据对象的实际类型来调用相应的函数,而不是在编译时就确定调用的函数。虚函数的实现依赖于虚函数表(VTable)和虚函数指针(VPTR),下面详细介绍它们的相关内容和实现原理。
2025-02-27 15:28:23
796
原创 C++11 多线程开发:互斥量解决多线程数据共享问题
举个例子,假设有两个线程同时对一个共享的银行账户余额进行操作,一个线程存钱,另一个线程取钱,如果没有合适的同步机制,就可能出现余额计算错误的情况。互斥量相当于一把锁,一个线程拿到这把锁后,其他线程就只能等待,直到锁被释放。虽然上面的代码能正常工作,但还有更安全的方式,就是利用 RAII(Resource Acquisition Is Initialization)来管理互斥量。在构造函数里自动加锁,析构函数里自动解锁,避免了忘记解锁导致的死锁问题,让代码更安全。时,其他线程无法同时执行这部分代码,保证了。
2025-02-19 09:50:40
620
原创 C++11 多线程开发:线程函数中的数据未定义错误
在 C++ 11 多线程开发中,当多个线程同时访问和修改共享数据,却没有进行适当的同步控制时,就可能出现数据未定义错误。例如,一个线程正在读取某个变量的值,而另一个线程同时在修改这个变量,这就可能导致读取到的值是不确定的,程序的行为也变得不可预测。
2025-02-18 14:54:05
200
原创 c++11 多线程开发 :Thead线程库的基本使用
想象你同时打开浏览器和IDE——这就是两个独立的进程,每个进程拥有独立的内存空间(类比:两栋独立别墅)浏览器中同时下载文件和渲染页面,这是同一个进程内的两个线程(类比:别墅里的不同房间共享水电)// 正确:所有权转移。// 危险操作:失去线程控制权。// 正确做法:确保线程安全结束。// 2. Lambda表达式(推荐方式)// 引用传递(必须使用std::ref)// 移动语义(提升性能关键)// 值传递(默认行为)
2025-02-18 13:35:36
439
原创 Qt5开发避坑指南:大学生必须知道的10个致命陷阱
/ Linux/MacOS无法识别。QMessageBox::information(this, "提示", "中文乱码");i++) { // 界面卡死。QFile file(QString::fromUtf8("中文路径.txt"));
2025-02-16 10:27:33
759
原创 Qt5开发入门指南:从零开始掌握跨平台开发
Qt是一个1995年由挪威Trolltech公司开发的跨平台C++图形用户界面应用程序框架。GUI模块:支持Windows/MacOS/Linux等主流系统Qt Quick:声明式UI开发框架Qt Network:网络通信模块Qt SQL:数据库操作模块:多媒体处理模块。
2025-02-16 10:23:08
651
原创 java实验5 类集框架
System.out.println("\n" + studentName + "的学号是: " + studentMap.get(studentName));4)使用subSet()方法获取并打印TreeSet中介于"banana"和"date"之间的元素(包括"banana"和"date")。System.out.println("\n介于\"banana\"和\"date\"之间的元素:");System.out.println("输出:" + findMostFrequent(nums1));
2025-01-04 15:40:03
837
原创 java实验4 反射机制
简单工厂设计模式是创建型模式,通过一个工厂类来创建不同类型的对象,客户端与具体产品解耦。动态工厂设计模式是简单工厂的扩展,它使用一个工厂方法来创建对象,允许在运行时动态决定创建何种产品。反射机制实现动态代理的原理是在运行时创建代理类和对象,通过代理对象拦截对真实对象方法的调用,并允许在调用前后执行特定操作。System.out.println("地址: http://localhost:8080" + postMapping.value());System.out.println("方法: post");
2025-01-04 15:35:19
911
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人