- 博客(31)
- 资源 (6)
- 收藏
- 关注
转载 UML类图与类的关系详解(转)
UML类图与类的关系详解虚线箭头指向依赖;实线箭头指向关联;虚线三角指向接口;实线三角指向父类;空心菱形能分离而独立存在,是聚合;实心菱形精密关联不可分,是组合;上面是UML的语法。在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association...
2018-12-15 22:59:16
343
原创 select / poll / epoll 差异
众所周知,网络socket处理常见的三种方式是select / poll / epoll(linux) / 完成端口(windows),简单说一下各自的差异: select: 1)每次轮循需要把监控的fd集合拷贝到内核 2)轮循fd数组查看fd是否可读写 3)最大fd值为1024,maxfd+1<=10...
2018-10-06 16:54:32
432
原创 指针数组与数组指针
(1)数组指针: int (*p)[5]: ----> 本质上是一个指针,占用4个字节; int a[4][5]; ----> 这里可以用 指针 p 来指向二维数组 a ,p=a; (2)指针数组: int *p[5]: -----&...
2018-10-06 16:10:55
288
原创 QT支持XP
QT支持XPQT 5.7 开始不支持 XP系统,建议使用5.6.2,亲测有效需要在.pro中增加一行代码: QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01该形式函数无法打开对话框QString fileName = QFileDialog::getOpenFileName(parent, QObject::tr("open file"), "
2017-05-16 11:22:37
3446
原创 协议栈各层对收到的帧过滤过程
感觉提到帧过滤的帖子挺少的,写一个blog分享下,顺便备忘: 应用层,传输层,网络层其实挺清楚,主要是设备驱动层的的部分功能,可能会有混淆,比如说 多播地址的检测;还有就是 跟软件工程一样,越早发现问题成本越低,这里过滤帧也是越早发现无效数据包,主机的处理负荷越小; 参考文献:TCP/IP 详解(卷1)
2016-11-06 19:26:46
1241
原创 live555多线程实现
接触过live555的童鞋都知道,live555是单线程的,用的是select模型;前几天预研了下多线程改造的问题,select模型受限于FD_SETSIZE,然后看到 下面一段注释:/* * Select uses arrays of SOCKETs. These macros manipulate such * arrays. FD_SETSIZE may be defined b
2016-11-01 16:36:23
4621
5
原创 无锁实现线程间共享数据
这几天比较没那么忙,review了一下以前写的一个linux网络库,看得我略微有点纠结,大概流程如下图: MainThread创建连接fd及处理相关的数据结构,然后加到链表ShareDataList中; DataHandleThread有一个epoll处理fd的流程,一次处理完之后会去check ShareDataList,如果有数据,就把数据加到epo
2016-10-27 14:39:50
1195
原创 主机直连通信(扫盲贴)
两台PC机网线直连通信,对于初学者来说可能会很疑惑为什么能通信,或者为什么不能通信;其实主要是对主机通信原理不了解;刚好前几天遇到个网线直连的问题,顺便就写个blog,属于扫盲帖,老司机可以直接跳过... 我们知道一般主机都有三个参数:IP, 子网掩码,网关;平时应用层通信的时候好像只用到了IP,其他两个并不怎么涉及,下面就会讲到这子网掩码和网关到底有什么用,和本文的主题有什么关系;
2016-10-26 16:28:43
4613
原创 IP探测实现 ARP与设备发现
前几天遇到个需求,要探测局域网内 PC机的 IP,有可能跨网段,但是在同一个交换机;于是果断从网上下载了一个DEMO,可以填写探测的IP地址范围,扫描出范围内的主机IP; 抓包看了下,发现一堆icmp包,看来是通过枚举ping实现的; 准备交差的时候被告知 负责探测的主机并不知道其他主机的IP,也不知道IP子网掩码和网关什么的,这样的话没法填写IP段,下载的这个D...
2016-10-23 21:32:38
11017
4
原创 关于TCP连接的三次握手和终止连接的四次握手
正常的TCP连接三次握手和终止连接的四次握手图(转自 TCP/IP 详解): 以前看到这个图一直有个疑问,就是 连接的时候需要分别需要两对SYN/ACK, 终止连接的时候也需要两对FIN/ACK,为什么TCP连接的时候可以合并成三次握手,而终止连接的时候要用四次握手,终止连接的时候 FIN/ACK 为什么不能合并? 今天终于大概明白一点,应该这样的:
2016-10-06 21:42:13
888
原创 live555 rtsp流丢包问题
live555使用过程中遇到一个问题,发送低分辨率的码流码流OK,发送高分辨率的码流会丢包,而且丢的大部分都是I帧; 两台设备网线直连测试是OK的; 开始怀疑是交换机的限制,但是个人对交换机原理并不是很了解,如果说大包进行过滤的话,到交换机的MTU应该都是一样的,不会说有I帧的包特别大,只是会拆包比较多而已,暂时排除交换机问题; 如果不是交换机问题,
2016-09-30 22:47:25
7006
4
原创 live555 场编码H264 帧率异常问题
最近在折腾live555 RTSP服务器,遇到一个码流帧率异常问题:用vlc客户端rtsp取流播放的时候 感觉像 慢放; 用elecard分析了码流,发现是场编码,帧率是25fps; 而帧编码的码流用vlc 取流播放 并没有发现异常; 单步调试live555源码后 发现live555框架 解析 场编码码流帧率 并没有出错,也是解析成25fps; 尝试修改解析代码,若
2016-09-20 21:34:27
3576
1
原创 C++ 无锁环形缓冲区实现
前段时间有个项目要实现一个基于live555的rtspserver,部分功能要用到环形缓冲区,网上看了一些blog,大部分是实验性质的,不太敢用,原理比较简单,所以就自己写了一个;实现环形缓冲区的关键点: 1. 一个线程读,一个线程写2. 读线程维护读指针,写线程维护写指针3. 数据一致性3.1 写线程写数据时,要先确定读指针;读线程读数据时,要先确定写指针; 这里
2016-06-26 20:38:28
7079
原创 orcl sql语句笔记(select成功,update/delete/insert失败问题)
四年多没有搞数据库了,前几天项目需要,折腾了下orcl,结果遇到一个奇葩的问题:把sql字符串拷贝到pl/sql里面执行,都能执行成功;放在程序里面,连接数据库进行执行就老是报执行失败,说是sqlcmd有错误; 开始一直觉得是权限的问题,毕竟select没有修改表操作,update/delete/insert都是会修改表数据的;但是检查账户已经是dba权限了,而且同一个账户在pl/sql里面执行又
2016-06-09 21:54:58
1578
原创 HTTPS加密--笔记
看TCP/IP 图解,看书上有个图画得挺好的,顺便摘下来了;主要是两种加密方式,一种对称加密,一种公钥加密;对称加密效率高,但是密钥不好管理;公钥加密相反,加密效率低,但是密钥好管理;而HTTPS通信就综合了两种方式,先用公钥A加密 “后续对称加密通信的私钥”(对称私钥B),发给WEB服务器,服务器用公钥A对应的私钥A+解密,得到“对称私钥B”,后续直接用对称私钥进行加密就可以了;
2016-05-02 23:52:19
439
转载 CramFS文件系统
转自http://blog.163.com/sunshine_linting/blog/static/44893323201191284510127CRAMFS文件系统是专门针对闪存设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3. 如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先得把flash上的映像文件全
2016-02-25 21:09:01
1101
原创 cmd>file 2>&1与cmd 2>&1 >file
平时经常混淆这两个写法,一段时间不用就忘记了,写个简单的blog记一下:cmd>file 2>&1:1)cmd>file: stdout-->file,stdout重定向到file,将标准输出信息写入到file文件;2)2>&1: 1表示stdout,2表示stderr,stderr重定向到stdout,由于之前已经将stdout已经重定向到file,所以stderr信息也会写入到
2015-12-25 21:31:49
1689
原创 VS2008编译多种版本 文件问题
在编译DLL的时候经常要编译一个动态库,一个静态库,可能还要编译一个共享MFC或者静态MFC的库,这个时候一般会建两个工程,引用同一份代码,但多少总感觉有点不方便。今天在研究电驴源码的时候,发现ResizableLib里面有Debug Static/Debug 等多种编译版本,可以通过配置管理器来实现多版本编译。以前一直都不知道,下面是配置的截图。
2013-04-12 11:07:54
787
转载 MFC的规则DLL中资源使用的问题
今天刚刚做了一个静态链接到MFC的规则dll,即“Use MFC in a static library“,该dll用来显示一个窗体。然后在一个mfc可执行程序A.exe中调用这个dll文件,可以正常的显示窗体。但后来做了一点小小的改动,即把dll改成动态连接到MFC的dll,即“Use MFC in a shared dll ”,然后在A.exe中调用该dll,结果窗体怎么都不显示。后来,经
2013-04-12 10:36:54
1001
原创 C++基础知识整理(一)
基础知识搜集整理下,以后查看复习什么的方便一点。 extern "C"使用 主要用于混合语言编程。比如说C语言调用C++开发的DLL,由于C++语言编译后的 函数符号表是带参数类型的,而C语言编译后函数符号表是不带参数类型的。所以要想在C语言中调用C++的DLL,DLL中导出的函数必须加上extern "C". 例:void foo(int,
2013-03-11 19:01:38
663
转载 VS2008使用宏记录来实现自动增加注释信息(转)
不管是做什么项目,代码里面的注释是必不可少的,其实一个好的程序员大部分的时间都是在给代码写注释,但是相同的注释不停的写也是件比较麻烦的事儿,在VS2008里面通过宏可以记录下注释信息,产生一个注释文件,每次需要的时候直接增加到类文件里面即可,方法如下: Sub AddComment() Dim DocSel As EnvDTE.TextSelection
2013-02-20 19:43:31
935
原创 C++ 防锁屏Demo
一般公司里面电脑都有锁屏程序,只要不操作电脑一段时间,就会自动锁屏。有段时间经常需要走开一小会,电脑就老是锁屏,每次都要输入密码,感觉比较麻烦,就想写一个防锁屏的程序。 自动锁屏程序原理应该是检测系统在规定时间内是否接收到消息,若未收到消息就自动锁屏。开始时用PostMessage试了一下,果然不行,看来锁屏程序检测的应该系统消息,而不是应用程序消息,所以只要间隔地给发送系
2013-02-20 16:55:58
2768
转载 栈区,堆区,全局区,文字常量区,程序代码区 详解
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2012-11-07 19:06:06
760
转载 结构体字节对齐问题
#include struct a { char no[10]; int p; long int pp; unsigned int ppp; char x; float y; double h; }xy; void main() {
2011-09-25 13:44:32
511
转载 SS_REALSIZECONTROL undefined 2104 和 heap curruption detected错误
今天遇到一个非常稀奇的问题,一个VS2008编好的MFC小程序,以前也能打开的,什么都是正常的。今天要在此基础上作点大的修改,然后就想复制一份。 可是复制完之后,想打开复制好的工程,发现.rc文件打不开了,出现了以下的提示: error RC210
2011-09-21 23:31:59
2713
1
原创 先中后序递归非递归遍历二叉树(c#)
复习了下遍历二叉树,以前一直想写下递归非递归方式,老是给忘了,现在写了,以后就不用写了,忘了还可以看看。。。 下面代码是用数组模拟的一棵树做测试用例,测试还不是很全面。 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace
2010-12-28 22:54:00
1079
原创 快排堆排笔记
今天复习了下快排和堆排 ,也上网查了下,随便写点,当笔记,以后忘记了就不用再百度了。 快排:就我理解,如果要从小到大排列,应该是把大数放到后面,然后把小数放前面,每放一个大数就high--;放一个小数low++;然后在high和low相交的时候把Key放在相交的索引上,其实key也就是大数小数的临界点。下面是代码: public static void Quick
2010-12-26 00:33:00
970
转载 鼠标事件侦听;
class MouseEventListener { private Control target = null; public event MouseEventHandler MouseLeftButtonClick;
2010-08-31 18:52:00
789
转载 委托和事件的区别
在.NET中,委托和事件是直接相关的.如果你有C++的基础,就不难理解委托的作用,委托要达到的目的基本上同C++中的函数指针是一样的,只是委托是类型安全,具有保护机制的---不会指向一个无效的地址.委托主要有两个应用:回调和事件处理.事件是通过委托来定义的,定义事件之前要有相应的委托,处理事件的委托有严格规定:1, 必须有两个参数,2.第一个参数是一对象,表示是谁引发的事件,第
2010-03-30 22:16:00
976
ASP.NET MVC 项目管理系统(VS2010)
2011-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人