Chinaunix首页 | 论坛 | 博客
  • 博客访问: 916206
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-11-04 16:04:57

TCP keepalive overviewIn order to understand what TCP keepalive (which we will just call keepalive) does, you need do nothing more than read the name: keep TCP alive. This means that you will be able to check your connected socket (also known as TCP sockets), and determine whether the co.........【阅读全文】

阅读(2398) | 评论(0) | 转发(0)

发布时间:2014-11-04 15:24:38

#include <sys/socket.h>int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len);第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。option_name指定准备设置的选项,option.........【阅读全文】

阅读(2668) | 评论(0) | 转发(0)

发布时间:2014-11-03 22:00:56

使用io_service作为处理工作的work pool,可以看到,就是通过io_service.post投递一个Handler到io_service的队列,Handler在这个io_service.run内部得到执行,有可能你会发现,io_services.dispatch的接口也和io_service.post一样,但不同的是它是直接调用而不是经过push到队列然后在io_services.run中执行,而在这个示例.........【阅读全文】

阅读(2981) | 评论(0) | 转发(0)

发布时间:2014-11-28 18:01:40

以太网(IEEE 802.3)帧格式: 1、前导码:7字节0x55,一串1、0间隔,用于信号同步 2、帧起始定界符:1字节0xD5(10101011),表示一帧开始 3、DA(目的MAC):6字节 4、SA(源MAC):6字节 5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留.........【阅读全文】

阅读(2944) | 评论(0) | 转发(0)

发布时间:2014-11-20 20:00:32

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。 其中,ACK是可能与SYN,FIN.........【阅读全文】

阅读(2414) | 评论(0) | 转发(0)

发布时间:2014-11-18 15:08:48

由于常常要和汉字处理打交道,因此,我常常受到汉字编码问题的困扰。在不断的打击与坚持中,也积累了一点汉字编码方面的经验,想和大家一起分享。一、汉字编码的种类汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用.........【阅读全文】

阅读(2307) | 评论(0) | 转发(0)

发布时间:2014-11-18 10:03:46

做应用识别这一块经常要对应用产生的数据流量进行分析。抓包采用wireshark,提取特征时,要对session进行过滤,找到关键的stream,这里总结了wireshark过滤的基本语法,供自己以后参考。(脑子记不住东西)wireshark进行过滤时,按照过滤的语法可分为协议过滤和内容过滤。对标准协议,既支持粗粒度的过滤.........【阅读全文】

阅读(2381) | 评论(0) | 转发(0)

发布时间:2014-11-14 16:36:04

(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)     去空格及特殊符号  s.strip() .lstrip() .rstrip(',')    复制字符串  #strcpy(sStr1,sStr)   sStr= 'strcpy'   sStr = sStr  sStr= 'strcpy'  .........【阅读全文】

阅读(2228) | 评论(0) | 转发(0)

发布时间:2014-11-11 22:16:05

l  下面我们就详细的分析一下BOOST::ASIO。首先我们从宏观使用的角度来考察ASIO。作为开始首先从同步IO方式开始我们的剖析之旅。1: BOOST ASIO 下的同步IO操作。由于asio库具有在不同平台,不同编译器下工作的特性。其对不同平台和编译器的适应是其一大特色且其具有类似于ACE跨平台的特性,相比起ACE的复.........【阅读全文】

阅读(2375) | 评论(0) | 转发(0)

发布时间:2014-11-11 22:03:23

1: 我预先需要知道哪些知识?   1)socket 通讯的基本知识:如tcp/ip基本原理,socket编程的基本知识,blocking/noblocking。   2) 关于select/poll/epoll模型的相关基础知识,知道其基本工作原理。   3) IOCP(IO Completion Port)完成端口的基本知识,见附录2。.........【阅读全文】

阅读(2269) | 评论(0) | 转发(0)

发布时间:2014-11-11 21:33:53

前几天写了篇日志<<关于boost.asio的一点备忘>>,主要是基于其在linux平台下的实现写的,今天还是一篇备忘,根据boost.asio在win与非win下的实现来谈谈它的跨平台设计与实现.boost.asio根据系统平台提供的事件多路分发机制来实现proactor模式,实现的差异化主要体现在支持IOCP机制与支持其它分发机制,下面就基于boost.asi.........【阅读全文】

阅读(2516) | 评论(0) | 转发(0)

发布时间:2014-11-11 21:25:42

这两天事情不多,简单看了下boost.asio的源码,因为asio采用proactor模式,而windows下的IOCP本身就是这个模式的体现,所以将精力集中在了asio在linux下的实现(asio在windows下采用了IOCP,linux下用epoll,还有其它的一些实现如kqueue,select等).在高性能服务器并发模型设计中,Reactor和Proactor是两个经常用到的设计模式,.........【阅读全文】

阅读(5510) | 评论(0) | 转发(0)

发布时间:2014-11-11 21:08:56

Boost asio 实现基于epoll,但是epoll只支持reactor模式,ASIO通过封装在epoll上实现了proactor。......【阅读全文】

阅读(2159) | 评论(0) | 转发(0)

发布时间:2014-11-11 20:52:02

io_service的作用io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。Io_servie的接口提供的接口有run、run_one.........【阅读全文】

阅读(2134) | 评论(0) | 转发(0)

发布时间:2014-11-11 20:34:38

首先介绍我们会经常看到的一些寄存器:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)4个数据寄存器(EAX、EBX、ECX和EDX):32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和.........【阅读全文】

阅读(2966) | 评论(0) | 转发(0)

发布时间:2014-11-10 21:11:59

这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:aio是linux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO。epoll作为select的li.........【阅读全文】

阅读(2781) | 评论(0) | 转发(0)

发布时间:2014-11-10 18:41:01

本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用。这几个预定义符的名称就没必要再介绍了,顾名思义嘛。点击(此处)折叠或打开// 演示 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用.........【阅读全文】

阅读(2713) | 评论(0) | 转发(0)

发布时间:2014-11-09 22:46:44

 Roger (roger2yi@gmail.com) 一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此以外,根据项目的需求,还会使用一些第三方的库。 所以为解决方案设置一个合理的目录结构,不但可以.........【阅读全文】

阅读(1720) | 评论(0) | 转发(0)

发布时间:2014-11-09 18:07:00

  应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作.........【阅读全文】

阅读(1807) | 评论(0) | 转发(0)

发布时间:2014-11-09 17:51:25

1. 添加编译所需要(依赖)的 lib 文件[解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 (等同于“#pragma comment(lib, "winsock.lib") ”语句)2. 添加库(Libs)文件目录方法 1:[解决方.........【阅读全文】

阅读(1632) | 评论(0) | 转发(0)

发布时间:2014-11-09 17:44:16

1.dll的优点代码复用是提高软件开发效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架,ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒.........【阅读全文】

阅读(2052) | 评论(0) | 转发(0)

发布时间:2014-11-06 10:00:48

简单的说:shared_lock是read lock。被锁后仍允许其他线程执行同样被shared_lock的代码。这是一般做读操作时的需要。unique_lock是write lock。被锁后不允许其他线程执行被shared_lock或unique_lock的代码。在写操作时,一般用这个,可以同时限制unique_lock的写和share_lock的读。例子:void Ge.........【阅读全文】

阅读(6774) | 评论(0) | 转发(0)

发布时间:2014-11-05 09:53:16

const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。 例如:const int nValue; &.........【阅读全文】

阅读(1751) | 评论(0) | 转发(0)

发布时间:2014-11-04 22:30:06

C 风格(C-style)强制转型如下:(T) expression // cast expression to be of type T函数风格(Function-style)强制转型使用这样的语法:T(expression) // cast expression to be of type T这两种形式之间没有本质上.........【阅读全文】

阅读(1365) | 评论(0) | 转发(0)

发布时间:2014-11-04 16:52:21

很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议。学过TCP/IP的同学应该都知道,传输层的两个主要协议是UDP和TCP,其中UDP是无连接的、面向packet的,而TCP协议是有连接、面向.........【阅读全文】

阅读(2732) | 评论(0) | 转发(0)
给主人留下些什么吧!~~

tianyashuibin2014-12-08 11:22

Oscarzhao:c++11 中貌似可以

嗯,是的,在c++11中可以

下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
   int a = 1;
           ^

回复  |  举报

Oscarzhao2014-11-26 20:12

tianyashuibin:除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

c++11 中貌似可以

回复  |  举报

tianyashuibin2014-10-23 21:57

除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

回复  |  举报

tianyashuibin2014-10-23 21:39

1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
  1.类里面的任何成员变量在定义时是不能初始化的。
  2.一般的数据成员可以在构造函数中初始化。
  3.const数据成员必须在构造函数的初始化列表中初始化。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的。
  6.不能给数组指定明显的初始化。  
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。

回复  |  举报

tianyashuibin2014-10-23 21:32

记住静态成员这样初始化:
C/C++ code

class A
{
public:
   static const int a[3];
};
 
const int A::a[3] = {1,2,3};

回复  |  举报
留言热议
请登录后留言。

登录 注册