- 博客(37)
- 资源 (9)
- 收藏
- 关注
原创 windows socket 获取当前套接字连接状态
其中tcpInfo.State 有一下几种状态,对应的含义,在我上一篇文章中有提到。直接上干货吧,查了官方文档才解决的,用了好久时间。
2024-08-15 11:59:24 367 1
原创 TCP的11种连接状态的含义
连接的数据传输阶段的正常状态。LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。SYN_RCVD:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。FIN_WAIT_2:等待远端TCP 的连接终止请求。
2024-08-14 13:49:58 301
原创 Winsock之select的用法
利用 select 函数来判断Socket上是否有数据可读,可写,防止程序在Socket处于阻塞模式中时,在一次 I/O 调用(如send或recv、accept等)过程中,被迫进入“锁定”状态;“锁定”状态,便可使用 FDSET 宏,将自己的套接字分配给 fdread 集合,再来调用 select。select 成功完成后,会在 fdset 结构中,返回刚好有未完成的 I/O操作的所有套接字句柄的总量。举个例子,假设我们想测试一个套接字是否“可读”,必须将自己的套接字增添到readfds集合中,
2024-08-05 19:07:42 871
原创 浅谈winsock tcp keepalive
注意:一定要给setsockopt做判断,判断他是否设置成功,我栽的坑在是否保活那个参数上,一开始我设置的是布尔类型,设置bool类型,就是setsockopt失败,改为int就成功了,大家也可以切换试试。注:这两种保活方式,在win11操作系统上一定要关闭其他网卡,我在win11家庭版上测试都不能保活,直到最后我关闭了win11的其他网卡,我去,这是操作系统的bug吧。// 在tcp通道空闲1000毫秒后, 开始发送心跳包检测。第二种,据说是在win10之前用这种方式,但是win10之后貌似也生效。
2024-08-03 15:00:30 381
原创 C++基础知识点总结
内存,关键字和函数、类、对象、设计模式、语言相关、语言特性、整理了一份文档在(https://download.csdn.net/download/czj01288/88958020?spm=1001.2014.3001.5503)对于学习面试有帮助。
2024-03-18 10:31:15 201
原创 设计模式六大原则
如果两个类不直接通信,两个类就不应当直接发生相互作用,如果一个类要调用另一个 类的方法,需要用第三个类转发这个调用。在父类出现的地方,子类可以替换,也就是说在父类出现的地方替换为子类,程序的行为不会放生变化。每个接口不存在子类用不到却必须要实现的方法,如果不然就要把接口拆分,使用多个隔离的接口。抽象不应该依赖细节,细节要依赖抽象。即针对接口编程,不要针对实现编程。对扩展开放,对修改关闭,面对需求,增加代码,而不是修改代码。一个类只做一件事,修改他改变的方法只有一种途径。4.迪米特法则(最少知道原则)
2024-03-13 14:37:36 209
原创 qt信号槽的最后一个参数
要信号成功连接槽或者另一个信号,必须保证signal和slot/signal的参数具有相同的顺序和相同的类型或者信号的参数比连接的槽函数(或者信号)的参数多,多余的参数会被忽略掉,如果连接错误,编译输出会给出警告。槽函数和普通的C++成员函数几乎一样,可以是虚函数,可以被重载,也可以是公有、保护或者私有的,也可以直接被其他成员函数调用,唯一与一般的成员函数不同的地方是可以与信号连接一起。注意同一个信号和同一个槽连接n次,每次信号被抛出后,槽函数就执行n次!多个信号可以连接同一个槽。一个信号可以连接多个槽。
2022-12-02 10:22:49 238 1
转载 gcc参数的意义
但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr/X11R6/lib目录下,我们编译时就要用-L /usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。------用./a.out执行文件。
2022-08-24 17:45:48 669
原创 gcc编译和g++编译的区别
也就是说,对于 .c 文件来说,gcc 指令会以 C 语言代码对待,而 g++ 指令则会以 C++ 代码对待。在编译时,如果使用g++指令,则无论目标文件的后缀名是什么,该指令都一律按照编译C++代码的方式编译该文件。因此,对于C语言程序的编译,我们应该使用gcc指令,而编译C++程序则应该使用g++指令。在实际使用中,我们通常习惯使用gcc指令编译C语言程序,用g++指令编译C++程序。此外,对于编译执行C++程序,使用gcc和g++也是有区别的。
2022-08-24 15:57:25 692
原创 VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll
VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll1VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll2VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll3VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll4VS静态编译C/C++解决程序丢失 VCRUNTIME140.dll5有时在自己电脑上写完一个程序,编译运行后一切正常,但是把这个程序放到没有装VS或没有装VC++运行库的电脑上便会弹出一个MessageBox:丢失 VCRUNT
2021-07-06 17:54:20 2169
原创 C++中四种强制类型转换
static_cast任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_const。在编译期强制转换。顶层const:表示指针本身是个常量。如:int *const p;底层const:表示指针所指的对象是一个常量。如:int const *p;该运算符没有运行时类型检查来保证转换的安全性。a、用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类..
2021-05-06 16:11:00 790
原创 CEF3 75 之后版本 Flash 不能自动播放的问题
CefRefPtr ClientHandler::GetRequestContext(){if (!shared_request_context.get()) {shared_request_context = CefRequestContext::CreateContext(CefRequestContext::GetGlobalContext(), new ClientRequestContextHandler2);}CefString error;CefRefPtr<CefValu
2021-04-10 14:19:16 374
原创 配置iptables,把80端口转到8080
在Linux的下面部署了tomcat,为了安全我们使用非root用户进行启动,但是在域名绑定时无法直接访问80端口号。众所周知,在unix下,非root用户不能监听1024以上的端口号,这个tomcat服务器就没办法绑定在80端口下。所以这里需要使用linux的端口转发机制,把到80端口的服务请求都转到8080端口上。在root账户下面运行一下命令:1iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080注
2021-04-07 17:01:29 1167
原创 虚继承
在多重继承(multiple inheritance)中, 可能出现多个基类继承自同一个基类, 即"菱形继承", 会导致最顶层的基类, 被复制多次;可以采用虚继承(virtual inheritance)的方式, 使派生类(derived class)只保留最顶层基类的一个副本.virtual, 即需要vptr(virtual table pointer), 即虚表指针, 额外占用4个字节;...
2021-03-12 14:29:02 102
原创 sql优化
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引:.尝试下面的技巧以避免优化器错选了表扫描:· 使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。· 对扫描的表使用FORCE INDEX告知MySQL,相对于使用给定的索引表扫描将非常耗时。 SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.
2021-03-08 13:49:54 432
原创 Android 通过adb 获取当前activity信息
8.1之前window 通过adb shell dumpsys activity | findstr “mFocus”Linux 通过adb shell dumpsys activity | grep “mFocus”8.1window 通过adb shell dumpsys activity | findstr “mResume”Linux 通过adb shell dumpsys activity | grep “mResume”...
2021-02-24 10:00:43 473
原创 linux下使用gdb定位内存泄漏
1.编译g++ -g xxx.cpp -o xxx2.ulimit设置ulimit -c unlimited3.gdb调试gdb ./xxx corerun
2021-02-19 09:01:46 510
原创 vector和map实现存储自定义类型
1.如果要用vector存储自定义类型数据,需要类重载运算符。如下class A{public: A(){} ~A(){} friend bool operator==(const A& a1, const A& a2) { return (a1.a==a2.a)?true:false; } // or /* bool operator==(const Convertable& other) { return x==other.x;
2021-02-18 14:12:47 287
C++应用程序内存结构
BSS段BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许
2020-12-31 13:21:37 175
原创 STL中各容器的数据结构
1. vector(向量)STL中标准而安全的数组,只可以在vector的“前面”增加数据。2. deque(双端队列double-ended queue)在功能上与vector相类似,但是可以从前后端向其中添加数据3. list(列表)list数据结构是双向链表游标以此只可以移动一步。如果对链表链表已经很熟悉,那么STL中的list其实就是一个双向链表(每个节点有指向前驱和指向后继的两个指针)。4. set(集合)set数据结构是二叉树(红黑树)包含了进过排序了的数据,这些数据的值(va
2020-12-23 16:25:52 598
原创 c++多线程编程整理(c++11)
C++11中std命名空间将Boost库中的Thread加入,Boost的多线程从准标准变为标准。头文件为#include,通过std::thread应用,使用过程中要注意join()和detach()的区别。数据同步的时候使用mutex,记得包含#include。1. 普通函数多线程调用无参函数#include <thread>#include <iostream>void print(){ std::cout<<"这是一个测试多线程的程序!!"<
2020-12-15 17:20:18 136
原创 Android内存泄漏
1.单例造成的内存泄漏2.非静态内部类造成的内存泄漏3.系统服务注册未取消造成的内存泄漏4.全局集合类造成的内存泄漏5.资源未关闭的内存泄漏6.WebView 造成的内存泄漏
2020-12-07 15:29:10 68
原创 python字符串导入类
// 类的路径path = “%s.test”%t// 获取文件cls = import(path)// 根据文件导入文件中的类t = getattr(cls, ‘t’)// 实例化类t1 = t()
2020-09-28 16:31:47 396
原创 Appium API滑动和拖拽
滑动和拖拽我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是接下来要学的滑动和拖拽了。swipe滑动事件从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动。方法:driver.swipe(start_x, start_y, end_x, end_y, duration=None):参数分别是起点坐标的x,y和终点坐标的x,y,以及滑动时间,滑动事件的单位是ms。实例1: 模拟手指从(100,2000),滑动到(100,1000
2020-08-04 14:57:16 643
转载 Python切片详解
利用python解决问题的过程中,经常会遇到从某个对象中抽取部分值的情况。“切片”操作正是专门用于实现这一目标的有力武器。理论上,只要条件表达式得当,可以通过单次或多次切片操作实现任意目标值切取。切片操作的基本语法比较简单,但如果不彻底搞清楚内在逻辑,也极容易产生错误,而且这种错误有时隐蔽得较深,难以察觉。本文通过详细例子总结归纳了切片操作的各种情形,下文均以list类型作为实验对象,其结论可推广至其他可切片对象。一、 Python可切片对象的索引方式包括:正索引和负索引两部分,如下图所示,以li..
2020-07-23 10:02:11 453
转载 20款测试工具库
众所周知,优秀的自动化测试工具可以让用户在采用DevOps或Agile的过程中,为团队的自动化提供良好的支持。因此在面对用户需要以更快的速度、交付出更高质量的软件产品时,许多企业自然会通过搜寻各种自动化测试工具,以满足他们在持续集成和DevOps方法论方面的需求。本文向您介绍20种自动化测试工具与库,其中包括一些对于自动化测试、单元测试、以及各种其他类型测试需求非常实用的工具。希望它们能够对您的项目有所帮助。1.SeleniumSelenium由如下三个工具组成:Selenium WebDriver
2020-06-10 16:46:32 1019
原创 java执行python脚本
public static void ExcPython(){ String pySubtitle = “E:/video/video/subtitle.py”; ProcessBuilder pb = new ProcessBuilder(“python”, pySubtitle); pb.inheritIO(); try {&nb
2020-05-20 17:02:29 182 1
转载 windows 安装ninja
ninja连接:https://ninja-build.org/https://github.com/ninja-build/ninja下载安装包:https://github.com/ninja-build/ninja/releasesgithub的安装指导打开HACKING.md:https://github.com/ninja-build/ninja/blob/master/HA...
2019-10-23 14:21:03 318
原创 python的排序
sort 与 sorted 区别:sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。sorted(iterable, cmp=None, key=None, reverse=False)参数...
2019-08-16 15:03:18 302
原创 python字符串大小写问题(力扣题库-检测字符串是否合法问题)
字符串.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。字符串.isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。字符串.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。字符串.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。字符串.is...
2019-07-01 10:18:27 395
原创 linux下so动态库的编译以及使用
1.生成jni文件javah Test(java文件)2.首先编译.c文件生成.o中间文件gcc -fPIC -D_REENTRANT jdk路径/include -I jdk路径/include/linux -c test.c3.用.o文件编译so库 gcc -shared -o libtest.so test.o 如果有依赖其他.o 在test.o后加依赖的.o文件4.编写java调...
2019-06-26 11:09:35 851
原创 初学Python之基础知识
1.import, from…import,import…as的区别在python中import或者from…import是用来导入相应的模块。举个例子:import numpyprint(numpy.random.rand(0,100))上面的例子是导入了整个的numpy包,然后调用了他里面的方法random另:import numpy as npprint(np.random....
2018-11-13 15:03:31 364 2
libusb源码,libusb是一个跨平台的用户空间USB库
2024-05-22
appium代码,Appium是开源的移动端自动化测试框架
2024-05-22
cef源码CEF全称Chromium Embedded Framework
2024-05-22
gdal源码 GDAL是一个开源的地理空间数据处理库
2024-05-22
GEOS 是一个用于处理几何对象的强大 C++ 库
2024-05-22
Skia源码skia 一个强大的2D图形渲染库Skia 是一个开源的2D图形处理
2024-05-22
超轻量级中文ocr,支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) + crnn(2.5M)
2024-03-13
cef_binary_87.1.14+ga29e9a3+chromium-87.0.4280.141_windows32.zip
2021-04-20
c++客户端和java(Netty)服务器端tcp通讯
2016-02-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人