李sir_Blog

博客园 首页 联系 订阅 管理

随笔分类 -  网络编程

摘要:无论什么平台,编写支持高并发性的网络服务器,瓶颈往往出在I/O上,目前最高效的是采用Asynchronous I/O模型,Linux平台提供了epoll,Windows平台提供了I/O Completion Port(IO完成端口,即IOCP)。Windows自winsock2开始就提供了IOCP支持,可以通过C++直接调用API,但对于基于.Net的C#开发,是在.Net Framework2.0开始才引入的,在2.0版本下,最高效的网络服务器是通过异步Socket的一些列Beginxxx,Endxxx方法实现的, 底层就是基于IOCP的。当.Net Framework升级到2.0 sp1之 阅读全文
posted @ 2013-07-04 15:20 李sir 阅读(3919) 评论(0) 推荐(1) 编辑

摘要:snmpsharpnet是基于C#开发一个开源组件,主要是为了方便使用SNMP协议而生,支持各种SNMP各种版本、各种指令的一个优秀组件。其官方网站是:http://www.snmpsharpnet.com/,里面有很多C#使用例子及相关介绍。有人也应用它来做了一些小应用,如博客:c#开发snmp应用这类开发能解决什么问题呢?简单来讲,可以开发相关设备管理及监控的程序。为了使用SNMP来进行调试及开发,需要在操作系统中安装SNMP服务(默认系统没有安装),安装和普通的安装Window组件一样的步骤,选定简单网络管理协议组件即可,安装后,在服务中启动SNMP服务即可,如下所示:虽然启动了服务,不 阅读全文
posted @ 2012-03-12 10:37 李sir 阅读(5159) 评论(3) 推荐(0) 编辑

摘要:首先来阐述几个重要的概念: 1。community (共同体名):如果翻译过来可能会显得难于理解,其实你完全可以把它理解为一个带有权限的登陆账户,这是你访问网络设备的重要凭据,比如你要访问交换机, 假如交换机的community是public,其权限是只读的,那你一次用户登陆交换机就可以查看有关交换机记录的数据。如果其权限是读写的,你你就有 权修改其中的一些设置,如封锁某一个交换机的端口。大部分交换机默认情况下,以public作为只读community,以private作为读写 community。 2。Oid(对象标志符):是以SMI(Structure of Management Info 阅读全文
posted @ 2012-03-02 09:16 李sir 阅读(4322) 评论(0) 推荐(2) 编辑

摘要:在Windows 下实现SNMP协议的编程,可以采用Winsock接口,在161,162端口通过udp传送信息。在Windows 2000中,Microsoft已经封装了SNMP协议的实现,提供了一套可供在Windows下开发基于SNMP的网络管理程序的接口,这就是 WinSNMP API。3.1 什么是WinSNMPWinSNMP的目的是为在Windows下开发基于SNMP的网络管程序提供解决方案。它为SNMP网管开发者提供了必须遵循的开放式单一接口规范,它定义了过程调用、数据类型、数据结构和相关的语法。图3.1显示了一个网络管理站(NMS)和网络管理代理(Agent)之间端到端的SNMP连 阅读全文
posted @ 2012-03-02 08:49 李sir 阅读(9356) 评论(1) 推荐(0) 编辑

摘要:网络管理分为两类。第一类是网络应用程序、用户帐号(例如文件的使用)和存取权限(许可)的管理。它们都是与软件有关的网络管理问题。这里不作讨论。网络管理的第二类是由构成网络的硬件所组成。这一类包括工作站、服务器、网卡、路由器、网桥和集线器等等。通常情况下这些设备都离你所在的地方很远。正是由于这个原因,如果当设备有问题发生时网络管理员可以自动地被通知的话,那么一切事情都好办。但是你的路由器不会象你的用户那样,当有一个应用程序问题发生时就可以打电话通知你,而当路由器拥挤时它并不能够通知你。为了解决这个问题,厂商们已经在一些设备中设立了网络管理的功能,这样你就可以远程地询问它们的状态,同样能够让它们在有 阅读全文
posted @ 2012-03-01 15:32 李sir 阅读(1556) 评论(1) 推荐(0) 编辑

摘要:留言板,论坛里的垃圾广告想必是每个人都很头疼的问题,为什么屡禁不止?这主要是大量的发帖机器人的恶劣行为,当然也有人工的。过滤广告的方法太多了,这不是我们重点讨论的问题。这里主要说一说我遇到的情况。我也写过留言板,加入了很完善的广告过滤机制,比如说,留言中不包含中文,或者包含2个以上的http等等就认为是广告,的确也起到了作用,自己测试也一切正常。但是随后,依旧有大量的垃圾广告留言,我百思不得其解,这些广告是怎么发上去的呢?按照广告内容我手动实验输入是不能发上去的。难道直接写数据库?这个在随后也否定了,我检查了数据库,所有写入内容均是正常的。这下我真的不知道哪里出了问题,搜索了半天也没搜索到结果 阅读全文
posted @ 2011-09-22 11:13 李sir 阅读(790) 评论(0) 推荐(0) 编辑

摘要:接受器-连接器设计模式(Acceptor-Connector)使分布式系统中的连接建立及服务初始化与一旦服务初始化后所执行的处理去耦合。 这样的去耦合通过三种组件来完成:acceptor、connector 和 servicehandler(服务处理器)。 连接器主动地建立到远地接受器组件的连接,并初始化服务处理器来处理在连接上交换的数据。 接受器被动地等待来自远地连接器的连接请求,在这样的请求到达时建立连接,并初始化服务处理器来处理在连接上交换的数据。 初始化的服务处理器执行应用特有的处理,并通过连接器和接受器组件建立的连接来进行通信。 结构 1. 服务处理器(Service Handler 阅读全文
posted @ 2011-05-04 13:55 李sir 阅读(714) 评论(0) 推荐(0) 编辑

摘要:1.ACE反应器框架简介 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。 在前面的章节中提到的Tcp通信的例子中,就是采用的阻塞式的工作方式:当接收tcp数据时,如果远端没有数据可以读,则会一直阻塞到读到需要的数据为止。这种方式的传输和传统的被动方法的调用类似,非常直观 阅读全文
posted @ 2011-05-04 13:54 李sir 阅读(1031) 评论(0) 推荐(0) 编辑

摘要:主动对象模式用于降低方法执行和方法调用之间的耦合。该模式描述了另外一种更为透明的任务间通信方法。 传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。 例如,设想对象"A"已在你的程序的main()函数中被实例化。当你的程序启动时,OS创建一个线程,以从main()函数开始执行。如果你调用对象A的任何方法,该线程将"流过"那个方法,并执行其中的代码。一旦执行完成,该线程 阅读全文
posted @ 2011-05-04 13:49 李sir 阅读(914) 评论(0) 推荐(0) 编辑

摘要:udp是一种无连接的协议,提供无连接不可靠的服务。 在ace中,通过ACE_SOCK_Dgram类提供udp通信服务,ACE_SOCK_Dgram和ACE_SOCK_Stream的API非常类似,一样提供了send,recv及close等常用操作,这里就不再累述了。 udp通信时无需像tcp那样建立连接和关闭连接,tcp编程时需要通过accept和connect来建立连接,而udp通信省略了这一步骤,相对来说编程更为简单。 由于udp通信时无建立连接,服务器端不能像Tcp通信那样在建立连接的时候就获得客户端的地址信息,故服务器端不能主动对客户端发送信息(不知道客户端的地址),只有等到收到客户端 阅读全文
posted @ 2011-05-04 13:44 李sir 阅读(735) 评论(0) 推荐(0) 编辑

摘要:概述: 传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP协议的可靠性是指保证每个tcp报文能按照发送顺序到达客户端。 Tcp通信过程一般为如下步骤: 服务器绑定端口,等待客户端连接。 客户端通过服务器的ip和服务器绑定的端口连接服务器。 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互。 常用API: 1. ACE_INET_Addr类。 ACE"地址"类ACE_Addr的子类,表示TCP/IP和UDP/IP的地址。它通常包含机器的ip和端口信息,通过它 阅读全文
posted @ 2011-05-04 13:43 李sir 阅读(1074) 评论(0) 推荐(0) 编辑

摘要:ACE Lock类属 锁类属包含的类包装简单的锁定机制,比如互斥体、信号量、读/写互斥体和令牌等。这里我就以互斥体为例简单的介绍一下其使用方法,对其它的锁类进行一些简单的说明。 1.互斥体的使用。 互斥体用于保护共享的易变代码,也就是全局或静态数据。这样的数据必须通过互斥体进行保护,以防止它们在多个线程同时访问时损坏。 在ACE中可以通过ACE_Thread_Mutex实现线程的访问互斥,下面的例子演示ACE_Thread_Mutex类的使用。 #include "ace/Thread.h" #include "ace/Synch.h" #include 阅读全文
posted @ 2011-05-04 13:39 李sir 阅读(5307) 评论(0) 推荐(0) 编辑

摘要:有过在不同的操作系统下用c++进行过多线程编程的朋友对那些线程处理的API可能深有体会,这些API提供了相同或是相似的功能,但是它们的API的差别却极为悬殊,十分令人头痛。 ACE_Thread提供了对不同OS的线程调用的简单包装,通过一个通用的接口进行处理线程创建、挂起、取消和删除等问题。 一. 线程入口函数 所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有下列原型:void* worker(void *arg) {}该函数输入一个void *型的参数,可以在创建线程时传入。注意:所有的线程启动函数(方法)必须是静态的或全局的(就如同直接使用OS线程API时所要求的一样) 阅读全文
posted @ 2011-05-04 13:32 李sir 阅读(684) 评论(0) 推荐(0) 编辑

摘要:ACE自适配通信环境 (Adaptive Communication Environment)是面向对象的框架和工具包,它为通信软件实现了核心的并发和分布式模式。ACE包含的多种组件可以帮助通信软件的开发获得更好的灵活性、效率、可靠性和可移植性。ACE中的组件可用于以下几种目的: 并发和同步 进程间通信(IPC) 内存管理 定时器 信号 文件系统管理 线程管理 事件多路分离和处理器分派 连接建立和服务初始化 软件的静态和动态配置、重配置 分层协议构建和流式框架 分布式通信服务:名字、日志、时间同步、事件路由和网络锁定,等等。 ACE体系结构 如图1-1所示,ACE具有分层的体系结构。在ACE框 阅读全文
posted @ 2011-05-04 13:28 李sir 阅读(622) 评论(0) 推荐(0) 编辑

摘要:ACE的安装是一件比较麻烦的事情,这里简单的记录了我在VS2005下安装ACE的过程,希望能给大家一个参考。 安装环境: 操作系统:Windows XP 专业版 编译环境:VS2005中文版 ACE版本:ACE-5.5.1 安装过程: 下载安装包。 Ace的安装文件可以在http://download.dre.vanderbilt.edu/中下载到,由于我是在windows环境下安装并且不需要TAO等其它库,便下载了ACE-5.5.1.zip。 下载完成后将其解压。我的解压路径为D:\Develop\ACE_wrappers。 设置环境变量 在操作系统添加一个名为ACE_ROOT的用户环境变量 阅读全文
posted @ 2011-05-04 13:25 李sir 阅读(638) 评论(0) 推荐(0) 编辑