<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Newzai的专栏]]></title><description><![CDATA[C++爱好者，专注C++后台开发。涉猎 Scala、Java，C#，python等其他语言。]]></description><link>https://blog.youkuaiyun.com/chenxiaohong3905</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chenxiaohong3905]]></copyright><item><title><![CDATA[web socket RFC6455 connection --asio C++11]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/26254103</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/26254103</guid><author>chenxiaohong3905</author><pubDate>Mon, 19 May 2014 15:41:18 +0800</pubDate><description><![CDATA[#ifndef __APP_WEBSOCKET_CONNECTION_H__
#define __APP_WEBSOCKET_CONNECTION_H__
#include 
#include "tcp_connection.hpp"


class websocket_connection : public tcp_connection
{
public:
	websocket_connecti]]></description><category></category></item><item><title><![CDATA[web socket RFC6455 frame 打包、解包]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/26003265</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/26003265</guid><author>chenxiaohong3905</author><pubDate>Fri, 16 May 2014 18:46:17 +0800</pubDate><description><![CDATA[#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]]></description><category></category></item><item><title><![CDATA[Web Socket rfc6455 握手 (C++)]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/26002983</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/26002983</guid><author>chenxiaohong3905</author><pubDate>Fri, 16 May 2014 18:40:38 +0800</pubDate><description><![CDATA[web socket rfc6455 握手。。]]></description><category></category></item><item><title><![CDATA[Base64 基于C++ bitset实现。]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/25160757</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/25160757</guid><author>chenxiaohong3905</author><pubDate>Tue, 06 May 2014 21:36:24 +0800</pubDate><description><![CDATA[Base64基础知识可以参考此文章，非常详细：http://blog.youkuaiyun.com/morewindows/article/details/11871429


转换为Base64，输入数据必须以三个字节为一组，转为为4个字节的可视字符。下面主要是根据下图的映射表就行编程：




以下代码实现了Base64的编码规则
#include 
#include 
#include]]></description><category></category></item><item><title><![CDATA[C++ 11 并发： 正确 的使用条件变量-condition_variable]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/25139915</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/25139915</guid><author>chenxiaohong3905</author><pubDate>Tue, 06 May 2014 16:40:42 +0800</pubDate><description><![CDATA[1. 标准实例

http://en.cppreference.com/w/cpp/thread/condition_variable

在cppreference提供的对 cv的例子，condition_variable和mutex都是全局变量。但是我们的程序不可能到处使用全局变量。如果把condition_variable和mutex的定义放到main函数中进去，作为局部变量，并且循环]]></description><category></category></item><item><title><![CDATA[基于C++11的线程池]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/25135533</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/25135533</guid><author>chenxiaohong3905</author><pubDate>Tue, 06 May 2014 16:09:10 +0800</pubDate><description><![CDATA[封装了一个基于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));
			
			});
	}

	...........................

	]]></description><category></category></item><item><title><![CDATA[wireshared-protobuf：proto.c:1765: failed assertion \"(guint)hfindex < gpa_hfinfo.len\"]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/24137467</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/24137467</guid><author>chenxiaohong3905</author><pubDate>Sat, 19 Apr 2014 21:28:38 +0800</pubDate><description><![CDATA[这个问题一般出现在TCP连接中。
会导致这个问题的原因基本上是和wireshared的粘包处理有关系。
 
一般是因为网络发送的包和抓包软件捕获的包错位了。例如，你发送4个包，抓包软件可能捕获到3,4,5,6等个数，不一定是4个。
如果发送的数据包是4个，捕获的到的也是4个，而且每个的大小一样，是不会出现1765这个问题的。但是如果抓包软件保持的包的个数和实际的分包个数不一样，就有可能会导]]></description><category></category></item><item><title><![CDATA[C++ Class Mapped Google Protocol Buffer Message]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/9013183</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/9013183</guid><author>chenxiaohong3905</author><pubDate>Mon, 03 Jun 2013 14:53:29 +0800</pubDate><description><![CDATA[摘要

Google Protocol Buffer 是一个优秀的基于二进制的网络消息编解码框架。应用于项目时，可以节省不少的人力资源、开发时间和程序BUG。但其不足之处是protobuf编译器生成的C++消息类（或者Java等其他语言的消息类）冗余数据过多，需要依赖于protobuf的编解码库，一般情况下都不能用于作为业务逻辑对象。因此大部分情况下，程序都需要另外独立定义业务逻辑对象，并且使]]></description><category></category></item><item><title><![CDATA[SNMP MIB 文法分析--基于Scala Parser模块]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/9010517</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/9010517</guid><author>chenxiaohong3905</author><pubDate>Mon, 03 Jun 2013 10:35:30 +0800</pubDate><description><![CDATA[1.为何要分析SNMP MIB文件。 分析MIB文件主要为了提取MIB文件中的oid定义及其对应的OID值，包含（OBJECT-IDENTIFIER 和OBJECT-TYPE等具有OID值的对象).2. 提取OID对象和其值后，有何用户呢？搞SNMP网管开发时，业务对象一般是居于C++，Java，C#等类，而且这些类一般只包含基础成员，没有指针，没有对象成员，没有集合成员等。这些业务对象再也SNM]]></description><category></category></item><item><title><![CDATA[Scala 文法词法分析---分析C++类的声明]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/9001055</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/9001055</guid><author>chenxiaohong3905</author><pubDate>Fri, 31 May 2013 16:05:20 +0800</pubDate><description><![CDATA[想要写个C++类的词法文法分析由来已久。一直找不到好的方法，之前尝试使用正则表达式来解析，但是有点受限，正则表达式过于复杂，而且一般是按行分析的。之所以要分析提取C++类的信息，主要还是为了解放劳动力，提高生产效率。我的目标是，以后写代码一般情况下只写类的基础框架，包含类名称，基类及其相关的类成员变量。其它的所有方法接口，都使用分析工具分析后自动生成。当然生成后的代码有些需要小改动后才可使用，有些]]></description><category></category></item><item><title><![CDATA[protobuf-wireshark编译小结]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/8819385</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/8819385</guid><author>chenxiaohong3905</author><pubDate>Thu, 18 Apr 2013 16:18:33 +0800</pubDate><description><![CDATA[一直使用protobuf作为网络开发的私有协议消息通信。但是抓包分析是个问题。幸好目前已经有了支持wireshark的protobuf插件。该插件是基于linux的代码编写的。
1. 首先要先搭建好wireshark编译环境，可以参考官方的wireshark编译环境配置，安装上面的配置基本上是无问题。
  本人出现在 nmake -f Makefile.name setup 时出现了解压压缩包]]></description><category></category></item><item><title><![CDATA[wireshark protobuf 插件]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/8818067</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/8818067</guid><author>chenxiaohong3905</author><pubDate>Thu, 18 Apr 2013 13:45:03 +0800</pubDate><description><![CDATA[搞网络开发的时候，涉及到很多私有协议。方便是方便，不过抓包分析问题就麻烦了，wireshark是不可能会为我们自己的网络协议开发分析工具的，唯有自己开发协议分析插件。在私有协议方面，google
 protobuf是一个类似与IDL的语言，用于定义消息接口，并且支持很多语言，原生支持C++、Java和python，而且还有很多第三方的支持，基本上支持C、C#、object-c，AS3，PHP等.]]></description><category></category></item><item><title><![CDATA[使用Scala编写Android程序]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/8765371</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/8765371</guid><author>chenxiaohong3905</author><pubDate>Sat, 06 Apr 2013 23:00:00 +0800</pubDate><description><![CDATA[环境搭建：


安装JDK和Scala（本人使用2.1）
下载Android SDK，最新版本里面已经包含了Eclipse和 ADT插件根据Eclipse版本和Scala版本下载对应的Scala IDE插件。http://download.scala-ide.org/安装AndroidProguardScala，地址https://androidproguardscala.s3.amazo]]></description><category></category></item><item><title><![CDATA[shared_ptr 在 stl容器中排序的陷阱。]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/7199969</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/7199969</guid><author>chenxiaohong3905</author><pubDate>Sat, 14 Jan 2012 00:14:35 +0800</pubDate><description><![CDATA[实例代码:
// 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;]]></description><category></category></item><item><title><![CDATA[说出来不好意思：从学C++开始，到现在8年了，才知道的using还有这种用法。]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/7099810</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/7099810</guid><author>chenxiaohong3905</author><pubDate>Sat, 24 Dec 2011 15:55:06 +0800</pubDate><description><![CDATA[#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]]></description><category></category></item><item><title><![CDATA[google protobuf repeated 字段二义性]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6929430</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6929430</guid><author>chenxiaohong3905</author><pubDate>Wed, 02 Nov 2011 18:01:19 +0800</pubDate><description><![CDATA[protobuf 消息的repeated字段，可以包含0~N个相同的内容。
当包含的内容大于0时，可以认为是在修改数据或者数据有改变。
当包含的内容是0时，也就是不包含时，究竟是不改变原来的数据，还是清空呢？
因此在设计协议时，遇到repeated字段时，最好在与某个optional字段相组合，用来指示是否包含相应的repeated字段。
例如。
message MSG1
{]]></description><category></category></item><item><title><![CDATA[Google Protobuf 使用介绍]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6906459</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6906459</guid><author>chenxiaohong3905</author><pubDate>Wed, 26 Oct 2011 11:15:08 +0800</pubDate><description><![CDATA[直接在 www.google.com.hk 上搜索google protobuf 后下载官方版本。
官方版本支持C++\Java\Python三门语言。
还有很多非官方的语言版本支持，如C\NET(C#/Vb.net)\Flex(AS3)等.
 
要通信，必须有协议，否则双方无法理解对方的码流。在protobuf中，协议是由一系列的消息组成的。因此最重要的就是定义通信时使用到的消息格式。]]></description><category></category></item><item><title><![CDATA[Java GUI -- Swing之外的选择开源RIA项目：Apache Pviot]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6505041</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6505041</guid><author>chenxiaohong3905</author><pubDate>Tue, 31 Aug 2010 21:08:00 +0800</pubDate><description><![CDATA[Java的GUI框架非常多，从Java内置的AWT、Swing，JavaFx，在到Eclipse（IBM）的SWT/JFace。但是每个框架都是有不尽人意的地方。其中Swing和SWT/Jface算是java GUI框架中比较优秀的。但是面对 Mircosoft的GUI框架，还是太差强人意。。RIA基础的出现使得 GUI的竞争进入了白日化的阶段。Flash、银光，JavaFx等。甚至 Ecli]]></description><category></category></item><item><title><![CDATA[喜欢WPF但是不喜欢C#的GUI程序员的第二选择--Apache Pivot]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6504459</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/6504459</guid><author>chenxiaohong3905</author><pubDate>Tue, 24 Aug 2010 08:14:00 +0800</pubDate><description><![CDATA[Apache Pivot是一个Java RIA 开发框架。使用XML文件定义GUI的元素层次结构+优化的集合框架，其MVC模型在GUI开发中的效率非常的高兴。。敢兴趣的可以了解了解。Pivot比起传统的Java GUI框架（AWT，Swing，SWT）等都是非常优秀的，比起JavaFx也是有过之而无不及。整个体系结构特别是GUI界面方面和WPF非常类似，但是其数据模型等比起WPF还要更加灵]]></description><category></category></item><item><title><![CDATA[关于Apache Pivot UI tooltip属性]]></title><link>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/5656695</link><guid>https://blog.youkuaiyun.com/chenxiaohong3905/article/details/5656695</guid><author>chenxiaohong3905</author><pubDate>Tue, 08 Jun 2010 21:06:00 +0800</pubDate><description><![CDATA[<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]]></description><category></category></item></channel></rss>