- 博客(38)
- 资源 (5)
- 收藏
- 关注
原创 web socket RFC6455 connection --asio C++11
#ifndef __APP_WEBSOCKET_CONNECTION_H__#define __APP_WEBSOCKET_CONNECTION_H__#include #include "tcp_connection.hpp"class websocket_connection : public tcp_connection{public: websocket_connecti
2014-05-19 15:41:18
1816
原创 web socket RFC6455 frame 打包、解包
#ifndef __APP_WEBSOCKET_FRAME_H__#define __APP_WEBSOCKET_FRAME_H__#include "memory.hpp"class buffer;struct websocket_frame{ websocket_frame(); ~websocket_frame(); static const unsigned int f
2014-05-16 18:46:17
2538
原创 Base64 基于C++ bitset实现。
Base64基础知识可以参考此文章,非常详细:http://blog.youkuaiyun.com/morewindows/article/details/11871429转换为Base64,输入数据必须以三个字节为一组,转为为4个字节的可视字符。下面主要是根据下图的映射表就行编程:以下代码实现了Base64的编码规则#include #include #include
2014-05-06 21:36:24
1760
原创 C++ 11 并发: 正确 的使用条件变量-condition_variable
1. 标准实例http://en.cppreference.com/w/cpp/thread/condition_variable在cppreference提供的对 cv的例子,condition_variable和mutex都是全局变量。但是我们的程序不可能到处使用全局变量。如果把condition_variable和mutex的定义放到main函数中进去,作为局部变量,并且循环
2014-05-06 16:40:42
3565
1
原创 基于C++11的线程池
封装了一个基于C++11的线程池对象。异步执行的任务,从线程池中分配一个空闲的线程来执行该任务.如果没有空闲的线程可以执行,则进入队列排队 task_pool_init(10); for( int i = 0 ; i < 200 ; i ++ ) { run_job([i]{ std::this_thread::sleep_for(std::chrono::seconds(1)); }); } ...........................
2014-05-06 16:09:10
2205
原创 wireshared-protobuf:proto.c:1765: failed assertion \"(guint)hfindex < gpa_hfinfo.len\"
这个问题一般出现在TCP连接中。会导致这个问题的原因基本上是和wireshared的粘包处理有关系。 一般是因为网络发送的包和抓包软件捕获的包错位了。例如,你发送4个包,抓包软件可能捕获到3,4,5,6等个数,不一定是4个。如果发送的数据包是4个,捕获的到的也是4个,而且每个的大小一样,是不会出现1765这个问题的。但是如果抓包软件保持的包的个数和实际的分包个数不一样,就有可能会导
2014-04-19 21:28:38
2123
1
原创 C++ Class Mapped Google Protocol Buffer Message
摘要Google Protocol Buffer 是一个优秀的基于二进制的网络消息编解码框架。应用于项目时,可以节省不少的人力资源、开发时间和程序BUG。但其不足之处是protobuf编译器生成的C++消息类(或者Java等其他语言的消息类)冗余数据过多,需要依赖于protobuf的编解码库,一般情况下都不能用于作为业务逻辑对象。因此大部分情况下,程序都需要另外独立定义业务逻辑对象,并且使
2013-06-03 14:53:29
4102
1
原创 SNMP MIB 文法分析--基于Scala Parser模块
1.为何要分析SNMP MIB文件。 分析MIB文件主要为了提取MIB文件中的oid定义及其对应的OID值,包含(OBJECT-IDENTIFIER 和OBJECT-TYPE等具有OID值的对象).2. 提取OID对象和其值后,有何用户呢?搞SNMP网管开发时,业务对象一般是居于C++,Java,C#等类,而且这些类一般只包含基础成员,没有指针,没有对象成员,没有集合成员等。这些业务对象再也SNM
2013-06-03 10:35:30
2965
原创 Scala 文法词法分析---分析C++类的声明
想要写个C++类的词法文法分析由来已久。一直找不到好的方法,之前尝试使用正则表达式来解析,但是有点受限,正则表达式过于复杂,而且一般是按行分析的。之所以要分析提取C++类的信息,主要还是为了解放劳动力,提高生产效率。我的目标是,以后写代码一般情况下只写类的基础框架,包含类名称,基类及其相关的类成员变量。其它的所有方法接口,都使用分析工具分析后自动生成。当然生成后的代码有些需要小改动后才可使用,有些
2013-05-31 16:05:20
2088
原创 protobuf-wireshark编译小结
一直使用protobuf作为网络开发的私有协议消息通信。但是抓包分析是个问题。幸好目前已经有了支持wireshark的protobuf插件。该插件是基于linux的代码编写的。1. 首先要先搭建好wireshark编译环境,可以参考官方的wireshark编译环境配置,安装上面的配置基本上是无问题。 本人出现在 nmake -f Makefile.name setup 时出现了解压压缩包
2013-04-18 16:18:33
4733
原创 wireshark protobuf 插件
搞网络开发的时候,涉及到很多私有协议。方便是方便,不过抓包分析问题就麻烦了,wireshark是不可能会为我们自己的网络协议开发分析工具的,唯有自己开发协议分析插件。在私有协议方面,google protobuf是一个类似与IDL的语言,用于定义消息接口,并且支持很多语言,原生支持C++、Java和python,而且还有很多第三方的支持,基本上支持C、C#、object-c,AS3,PHP等.
2013-04-18 13:45:03
11169
3
原创 使用Scala编写Android程序
环境搭建:安装JDK和Scala(本人使用2.1)下载Android SDK,最新版本里面已经包含了Eclipse和 ADT插件根据Eclipse版本和Scala版本下载对应的Scala IDE插件。http://download.scala-ide.org/安装AndroidProguardScala,地址https://androidproguardscala.s3.amazo
2013-04-06 23:00:00
5200
2
原创 shared_ptr 在 stl容器中排序的陷阱。
实例代码:// test1.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include #include using namespace std;using namespace std::tr1;
2012-01-14 00:14:35
4166
原创 说出来不好意思:从学C++开始,到现在8年了,才知道的using还有这种用法。
#include #include class A{public:A(){}virtual ~A(){}virtual void print(int a) { printf("A:%d\r\n",a);}virtual void print(const std::string & str ) {printf("A:%s\r\n",str.c_st
2011-12-24 15:55:06
2150
原创 google protobuf repeated 字段二义性
protobuf 消息的repeated字段,可以包含0~N个相同的内容。当包含的内容大于0时,可以认为是在修改数据或者数据有改变。当包含的内容是0时,也就是不包含时,究竟是不改变原来的数据,还是清空呢?因此在设计协议时,遇到repeated字段时,最好在与某个optional字段相组合,用来指示是否包含相应的repeated字段。例如。message MSG1{
2011-11-02 18:01:19
14778
原创 Google Protobuf 使用介绍
直接在 www.google.com.hk 上搜索google protobuf 后下载官方版本。官方版本支持C++\Java\Python三门语言。还有很多非官方的语言版本支持,如C\NET(C#/Vb.net)\Flex(AS3)等. 要通信,必须有协议,否则双方无法理解对方的码流。在protobuf中,协议是由一系列的消息组成的。因此最重要的就是定义通信时使用到的消息格式。
2011-10-26 11:15:08
19354
原创 Java GUI -- Swing之外的选择开源RIA项目:Apache Pviot
Java的GUI框架非常多,从Java内置的AWT、Swing,JavaFx,在到Eclipse(IBM)的SWT/JFace。但是每个框架都是有不尽人意的地方。其中Swing和SWT/Jface算是java GUI框架中比较优秀的。但是面对 Mircosoft的GUI框架,还是太差强人意。。RIA基础的出现使得 GUI的竞争进入了白日化的阶段。Flash、银光,JavaFx等。甚至 Ecli
2010-08-31 21:08:00
4034
原创 喜欢WPF但是不喜欢C#的GUI程序员的第二选择--Apache Pivot
Apache Pivot是一个Java RIA 开发框架。使用XML文件定义GUI的元素层次结构+优化的集合框架,其MVC模型在GUI开发中的效率非常的高兴。。敢兴趣的可以了解了解。Pivot比起传统的Java GUI框架(AWT,Swing,SWT)等都是非常优秀的,比起JavaFx也是有过之而无不及。整个体系结构特别是GUI界面方面和WPF非常类似,但是其数据模型等比起WPF还要更加灵
2010-08-24 08:14:00
1622
原创 关于Apache Pivot UI tooltip属性
<br />1. tooltip 是作为Component的Skin的一部分,而不是控件的一部分。<br />2. 每个控件的tooltip都只有一个,对于ListView和TreeView也是一样。<br />3.tooltip默认实现是不能wrapText的。<br /> <br />如果要实现ListView或者TreeView的每个Item或者Node的toolTip都不一样时,需要重载实现getTooltipText<br />根据当前窗口的鼠标指针动态获取ListView和TreeView的It
2010-06-08 21:06:00
1249
原创 WPF与 Apache Pivot 比较
为什么要比较WPF和Apache Pivot呢?这两个东西都是八辈子搭不上杆的。一个是属于微软的的GUI系统,一个是属于Java系列的GUI系统,我们来看看他们的相同点吧。1. RIA 让他们走到了一起。WPF是微软RIA的家底。Pivot也是Java的一个RIA框架。他们都可以在浏览器上运行,也可以只是部署在桌面上。2. 两者都可以使用XML文件来定义用户界面,使用代码来处理逻辑。
2010-03-03 09:37:00
3632
原创 Apache Pivot background Task 和 UI thread
Apache Pivot后台线程与UI线程文章中用到的一些术语的说明:UI操作:修改了UI组件的某些属性或则特性,比如修改按钮显示的文本或则图标等或读取UI组件的属性或者特性。非UI操作:不能有修改或则读取任何与UI组件相关的属性或者特性。background Task(后台任务): 用于执行非UI操作的线程。UI thread:用于执行UI操作的线程,一般一个应用程序只有一个
2010-01-26 16:52:00
1968
原创 Pivot WTKX 静态属性
WTKX的元素的属性类型有多种:1.标准的JavaBean属性,代表JavaBean 中的一个setter方法。2.只读序列属性3.只读字典属性4.静态属性 在这里我们主要讨论静态属性,因为静态属性和其它三个属性不相同。对于 标准JavaBean属性,由于有相应的setter方法,因此我们可以确定该属性属于 元素的一个域(字段)。对于只读属性,只读系列属性,该属性属
2010-01-26 09:32:00
968
原创 Pivot WTKX变量绑定
在 Apache Pivot WTKX源文件中的某些组件会使用wtkx:id 对组件进行命名,我们称为“命名对象(named object)”。在编写Java代码时,我们经常要引用到WTKX中的命名对象,比如为某个控件添加事件监听器,修改组件的属性等。有两种方式可以在Java代码中引用到WTKX中命名对象。1.直接通过 WTKXSerializer#get方法,给get方法传递在WTK
2010-01-26 09:09:00
7637
翻译 Apache Pivot WTKX入门
WTKX是用于创建Pivot应用程序的基于XML的标记语言。虽然,通常是用于定义用户界面的结构,但是也可以用于声明创建Java对象。 本节主要介绍WTKX和解释如何使用WTKX创建和配置java对象集合。假定你已经熟悉掌握了Pivot和Java程序设计语言。 元素(element)在WTKX中,一个XML元素可能表示一下其一:一个类的实例一个类实例的特性(属
2010-01-24 20:09:00
13431
4
原创 ACE学习手记-----智能指针(ACE_Intrusive_Auto_Ptr)
前面一篇写了智能指针,重点介绍了ACE_Auto_Ptr和ACE_Refcounted_Auto_Ptr 两个智能指针的使用,以及他们的不同点。当时对ACE_Intrusive_Auto_Ptr指针还没有深入的了解、也不知道ACE_Intrusive_Auto_Ptr智能指针的用途是什么? ACE_Intrusive_Auto_Ptr和ACE_Refcounted_Auto_Ptr
2008-11-30 21:08:00
2133
原创 ACE学习手记-----ACE_Log_Msg
ACE_Log_Msg log输出目的地与格式: 输出目的地:就是我们要把日志信息输出或者打印到什么地方,比如控制台的屏幕、文本文件或者syslog系统日志文件等。 输出格式: 在用户提交log信息时,是否在用户提交的日志信息前面插入一些标记,比如程序名称、线程id,提交日志消息时的时间、日志优先级等额外的信息。 STDERR 把日志消息输出到
2008-11-29 20:41:00
3558
原创 ACE学习手记 -----关于 ACE_CDR
ACD_CDR编译时的4个宏、下面4个宏在ACE编译时默认都是关闭的。如果要让自己的ACE库有相关的能力需要在config.h中定义以下宏ACE_InputCDR 相关的宏 ACE_CDR_IGNORE_ALIGNMENT 该宏让CDR Stream忽略输入流的字节对其,全部按单字节对其。 如果没有设置该宏,ACE采用8个字节对输入流进行默认对其。 ACE_DISABLE_SWAP_ON
2008-11-27 16:21:00
2947
1
原创 ACE学习手记--- 智能指针(ACE_Auto_Ptr / ACE_Refcounted_Auto_Ptr)
ACE库提供的智能指针的功能是相当强大的。主要有ACE_Auto_PtrACE_Refcounted_Auto_PtrACE_Intrusive_Auto_Ptr三个智能指针,其中用的比较多的却容易使用的是前面2个。最后一个需要在自己的类中实现一些规定的函数。在这里主要介绍前面2个指针的使用。 ACE_Auto_Ptr ACE_Auto_Ptr 更像RAII的应
2008-11-24 20:14:00
3941
原创 ACE学习手记----ACE_INET_Addr类
ACE_INET_Addr类,在这个ACE_网络框架中,应该是比较重要的辅助类,该类主要封装了C SOCKET 的地址对象,通过外观封装的模式,把struct sockaddr_in封装在内。方便用户的操作。 因此个人认为掌握此类的常用构造方法和常用的成员函数,并深刻的理解,对于后续的学习ACE或者开发ACE网络应用程序应该会起到很大的帮助。工欲用其器、必先利其器。就先让我们把ACE_I
2008-11-16 14:29:00
9654
原创 SQL C++代码自动生成器(sql2class)介绍
sql2class 是一个工具,用于把数据库表格转换为一个C++对象。配合odbcwrapped 和mysqlwrapped 2个面向对象的数据库接口封装库一起使用。 odbcwrapped 用C++类封装了Windows OBDC API的调用。mysqlwrapped 用C++类封装了 Mysql C API的调用。 2个库都使用统一的接口。简化了程序员在开发数据库相关
2008-11-11 22:51:00
3410
原创 GNUGK(2.2.3)源代码分析之线程池结构
GNUGK2.2.3一改之前2.0版本版本的单线程结构。采用了作业(Job,Task)-代理(Agent)-执行者(Worker)三层控制结构 。使整个体系结构更加易于扩展和清晰。在这里主要分析Job,Task,Agent,Worker他们之间的关系,以及Job的派生类Jobs与RegularJob时等。理解Job,Agent,Worker三个类之间的关系,需要跟大家复习一下操作系统中的程
2007-05-24 20:07:00
1406
原创 php调用mysql存储过程和函数的方法
存储过程和函数是MySql5.0刚刚引入的。关于这方面的操作在PHP里面没有直接的支持。但是由于Mysql PHP API的设计,使得我们可以在以前的PHP版本中的mysql php api中支持存储过程和函数的调用。在php中调用存储过程和函数。 1。调用存储过程的方法。 a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对, 一个p
2005-04-28 11:30:00
5684
原创 CMPP2.0 SP 端开发设计思路
我写在这里只是想把握的思路记录在这里而已,我并不是CMPP SP开发的高手,我只是刚刚入门而已.问题想多了,总是把前面的东西给忘记了,看来记性不是很好啊,所有要把我想的东西给点点滴滴的记录下来,当然,我的想法也有可能是错误的,希望给予批评改进.应用程序使用的是收发二级缓冲. 一级缓冲 二级缓冲接受数据缓冲 把从网络中接受的数据放在这里rbuffer 只保留CMPP_DELIVER消息结构的对象.
2005-03-16 16:21:00
2736
原创 开发工工具配置笔记——Jcreator(高亮度显示Struts类名)
前几天在学习P/L SQl时,为了找到一个好的编辑器而烦恼,SQL*PLUS太麻烦了,记事本又太落后了,有些开发工具实在时杀鸡使用牛刀,后来还是选择了UltraEdit来编写PL SQL代码,可是该编辑器又没有默认高亮度显示PL SQL关键字的功能,不过幸好,还是在网上找到了配置的方法。 平时一直在写些Struts代码,除了使用Jb这样的大型工具以外,其他的工具根本就是不提工stru
2004-12-19 00:20:00
1682
原创 Struts 入门好文章,通俗易懂(转载)
本章讲解了一个简单的Struts应用例子helloapp应用,这个例子可以帮助读者迅速入门,获得开发Struts应用的基本经验。该应用的功能非常简单,接受用户输入的姓名,然后输出“Hello ”。开发helloapp应用涉及以下内容:l 分析应用需求l 把基于MVC设计模式的Struts框架运用到应用中l 创建视图组件,包括
2004-11-02 14:46:00
4964
8
原创 EJB Container/server 提供的服务
EJB Container是Enterprise java bean的执行环境,它通过EJB Server提供强大的系统级服务(system-level-services),程序员不需要自行去开发和维护这些属于系统层级服务的程序代码,它主要提供有Persistence、security、concurrency和transaction四项重要的系统服务。 Persistenc
2004-10-31 19:25:00
1537
protobuf实例-C#-聊天服务器
2014-07-19
wireshark-win32-1.8.6-protobuf
2014-04-24
protobuf-wireshark plugins
2013-04-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人