服务器中判断客户端socket断开连接的方法

Posted by & filed under Uncategorized.

下面来罗列一下判断远端已经断开的方法: 法一: 当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。   法二: struct tcp_info info; int len=sizeof(info); getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len); if((info.tcpi_state==TCP_ESTABLISHED))  则说明未断开  else 断开   法三: 若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。   法四: int keepAlive = 1; // 开启keepalive属性 int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测 int Read more […]

编译snmp++V3.2.24

Posted by & filed under Uncategorized.

I、windows下 1)到snmp++官网http://www.agentpp.com/snmp_pp3_x/download_snmp_ppv3/download_snmp_ppv3.html下载: SNMP++v3.2.24 LIBDES-l-4.01a MS VC++7.0 Project Files 2)解压这三个压缩包到某个目录,注意目录结构,以使工作空间文件.sln能正确指向相对路径的源文件,应该如下: ├─snmp++ │  ├─src │  ├─include │  │  └─snmp_pp ├─msvc │  ├─dynamic │  └─static └─libdes ├─Debug └─asm 3)用VC.NET(或者VC2003、VC2005、VC2008)打开msvc目录下的dynamicLIB.sln、staticLIB.sln分别编译动态链接库、静态链接库。 II、Linux下 1)同I 2)同I 3)cd agent++/src 4)make -f Makefile.linux   Read more […]

类中使用 createthread 如何传递this(转)

Posted by & filed under Uncategorized.

本文链接:http://www.titilima.cn/show-66-1.html 按:球胡麻差,山西方言,乱七八糟之意。 C++对于托管代码的封装一向不是很尽善尽美,从最初的static成员函数到MFC的消息映射表,及至ATL的thunk机制。真可谓花样百出、层出不穷了。究其原因,这乃是C++的this指针惹的祸,这个“祸害”也就是Borland的VCL是用Object PASCAL编写的,而C++ Buider只能提供VCL的动态链接之缘由了。 然而,我在不经意之间却获得了另一个封装的方法,完全脱离了static成员函数的一贯做法,并直接将非static成员函数指定为线程的托管代码——也许这听上去很神奇,其实不过尔尔,且听李马慢慢道来。 首先我将线程对象封装成一个纯虚基类ThreadObject,如下:   class ThreadObject { public: virtual void Create() = 0; void Wait() { WaitForSingleObject( m_hThread, INFINITE ); CloseHandle( m_hThread ); } protected: virtual DWORD WINAPI DoWork( void ) { for ( int i = 0; i < 10; i++ ) { Sleep( rand() % 1000 ); printf( “Thread %08X is running. Read more […]

(转)主机/路由/交换/防火墙 OID查询、MIB浏览

Posted by & filed under Uncategorized.

今天在客户这反复查找Cisco2811路由器的某端口汇总流量相关OID,但是发现在路由器上只能看见上行和下行的流量的SNMP相关信息,为了 将Tx和Rx流量汇总监控,我和客户经理打算将Tx和Rx端口流量二者的流量相加,可是却没发现没能找到合适的OID,于是乎上Cisco官网上查找,根 据Object Name查找却不知道具体的名称,很无奈,最终使用“鸟枪法”,用MIB Brower将路由器上的OID获取,然后再细细比对数据,还真费劲啊,最终找到了那两个久违的OID,下面把我参考的资料共享一下。 1、思科设备 OID官网查询网站:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en 2、OID_INF OID查询网站: http://www.oid-info.com/ 3、个人博客上的资料: 安静的角落:http://cnctblog.com/?p=717(使用SNMP Read more […]

ubuntu下snmp配置

Posted by & filed under Uncategorized.

snmp服务器搭建(v1,v2,v3) Ubuntu系统 apt-get install snmpd vi /etc/snmp/snmpd.conf 1.增加一行 agentaddress 110.1.1.2 (本机IP) 2.修改一行 将 access MyROSystem “”     any       noauth    exact  system none   none 改为 access MyROSystem “”     any       noauth    exact   all   none   none 键入snmpwalk -v 2c -c public localhost    有数据说明正常 #vi /etc/default/snmpd snmpDOPTS=’-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1′ 将之修改为: snmpDOPTS=’-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid’ /etc/init.d/snmpd restart v1和v2的访问命令: snmpwalk -v 2c(1) -c public 110.1.1.3(对端IP) v3的配置 vi /etc/snmp/snmpd.conf 添加: createUser Read more […]

计算时延/抖动/丢包的算法-(备忘)

Posted by & filed under Uncategorized.

简单封装了一下,得到发包收包的间隔之后,直接塞到一个Vector中,然后直接调用: 头文件:

源文件:

 

(转)浅谈工作中使用过的几种C++界面库

Posted by & filed under Uncategorized.

通常一个界面库是否有广大的使用人群,我觉得与以下几个因素有关:支持的操作系统是否多样,支持的操作系统市场占有率是否大,使用是否方便,是否有良好的”所见即所得”(WYSIWYG)的开发工具支持,是否有经济实力的雄厚的大公司支持等等。结合我使用过的的几种C++界面库和大家交流一下。 1.MFC(MicroSoft Foundation classes):相信在windows下进行开发的各位同僚们都用过MFC进行界面开发。我记得自己初次接触MFC是大学毕设一个关于数字图像处理的课题,用的IDE是VS 6.0,那时就干了件“重复造轮子“的事,而且是个大轮子,那时并不知道VS有生成MFC程序的向导,结果坐在电脑前没黑没白的照着一本参考书上的自动生成代码敲了几天几夜,结果很残酷,没运行起来。着实把我吓了一跳,以为开发软件这么难,现在想想MFC的自动生成代码中的有些语言特性直到现在自己也未必完全了解。之后学习了孙鑫的《VC++深入编程》这才算是对MFC渐渐入了门,但是在此后有相当一段时间内都是对MFC只了解其表,会应用,并不了解其本质。直到看了侯捷老师的《深入浅出MFC》才算是对MFC有了本质的认识。(侯捷老师的写作风格很好,这是我第一次真正喜欢上一本计算机书籍)正如侯捷老师所说,要学习MFC首先要对windows程序的事件驱动特性有所了解,消息的产生,获得,分派,判断,处理;还要了解C++的性质(封装,继承,多态)。之后,侯捷老师又仿真了MFC的六大关键技术:MFC的初始化过程,RTTI(执行时类型识别),动态生成,Persistence(永久留存),消息映射,消息绕行,到此为止,MFC已经被剖析的很彻底和细致了,你也可以掌握MFC的本质了吧! 我的使用体验:支持MFC的IDE我使用过VS Read more […]

Ubuntu下配置虚拟IP地址

Posted by & filed under Uncategorized.

我配置虚拟IP地址的目的是为了实现高可用性,那是后话,先看看Ubuntu12.04下如何设置虚拟IP地址。 首先看一下我的Ubuntu的IP: [plain] view plaincopyprint? chenshu@sloop2:~$ ifconfig eth0      Link encap:Ethernet  HWaddr d0:67:e5:ef:5a:6e           inet addr:10.112.18.158  Bcast:10.112.18.255  Mask:255.255.255.0           inet6 addr: fe80::d267:e5ff:feef:5a6e/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:341661 errors:0 dropped:0 overruns:0 frame:0           TX packets:242801 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1000           RX bytes:328287656 (328.2 MB)  TX bytes:31858367 (31.8 MB)           Interrupt:17 lo        Link encap:Local Loopback           inet addr:127.0.0.1  Mask:255.0.0.0           inet6 addr: ::1/128 Scope:Host           UP LOOPBACK RUNNING  MTU:16436  Metric:1           RX packets:17904 errors:0 dropped:0 overruns:0 frame:0           TX packets:17904 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0           RX bytes:2160236 (2.1 MB)  TX bytes:2160236 (2.1 MB) ping一下191,发现网络中没有,就用它做虚拟IP吧。 sudo Read more […]

Zenoss通过SSH远程监控Linux

Posted by & filed under Uncategorized.

前言:如果Linux系统没有SNMP的环境,如何来使用Zenoss进行监控呢?Zenoss提供了基于SSH的远程命令方式,基本工作原理是 Zenoss通过 SSH向远程主机发送执行命令,运行位于主机上的Plugin来收取数据。这里要求被监控主机上必须安装Zenoss Plugin(安装plugin是花我最多时间的地方)。 测试环境: Zenoss box:openSUSE11 (hostname:zenoss ip: 192.168.2.10) 被监控Linux:openSUSE11 (hostname:linux11 ip:192.168.2.11) 在Linux上安装Zenoss Plugin: Zenoss Plugin可在这里下载 在下载之前请先检查你的python版本:rpm -q python,如果已经是2.5了,那就请下载源码包。 在linux11上安装zenoss-plugin (可以使用root) wget http://downloads.sourceforge.net/zenoss/Zenoss-Plugins-2.0.4.tar.gz tar Read more […]

详解:四大顶级开源网络管理工具(转)

Posted by & filed under Uncategorized.

随着网络方案的不断扩展与多元化走势,大量有线及无线设备开始成为网络体系不可或缺的组成部分,用户对网络监控工具的需求也随之持续走高。虽然功能丰富的商业产品比比皆是,但来自开源社区的强大方案仍然对监控工具市场的发展起到巨大的推动作用。 在本系列文章中,我们将一同剖析四款高人气开源产品Nagios Core 3.5、NetXMS 1.2.7、OpenNMS 1.10.9以及Zenoss Core 4.2。四款产品都已经相当成熟,足以提供与其它企业级同类方案相媲美的综合性监控能力,同时拥有良好的社区支持体系。 四款产品都提供管理、性能监控以及网络设备警示与报告功能,其作用范围涵盖服务器、路由器、交换机、打印机、UPS、网络站点、业务应用程序以 Read more […]