C#开发
文章平均质量分 57
schumyxp
如果你无所不能,那就来当一名程序员吧!
展开
-
事务处理
<p class=MsoNormal align=left style=text-align:left;mso-layout-grid-align:none;text-autospace:none><span lang=EN-US style=font-size:9.0pt;font-family:新宋体;mso-hansi-font-family:"Times New Ro原创 2006-04-10 14:03:00 · 668 阅读 · 0 评论 -
.net下基于winpcap实现的网络分析程序(一)
其实,基于winpcap的网络分析程序已经遍地开花了,现在写这些似乎挺落伍的。而且,.net下的winpcap编程也有人已经做了封装,只是思路和我的不大一样。但是无论怎么说,也是捣鼓了一阵子。多少有些心得,就一点一点写下来好了。程序的完整代码,等文章全写完了再发表好了。我的思路是这样滴:用vc++.net对winpcap进行封装,实现数据包的抓取和解析,然后再通过c#进行调用,完成原创 2008-01-04 16:47:00 · 1896 阅读 · 0 评论 -
.net下基于winpcap实现的网络分析程序(二)
这次的重点放在数据的解析上面。具体的winpcap的操作嘛,因为官方的手册已经很好很强大了,我就不废话了。只在这里留个链接好了,大家可以自行去看。中文的手册:http://www.coffeecat.net.cn/winpcap/html/index.html现在呢,假设我们已经抓取到了一个数据包。数据包解析还涉及到了大数小数的问题。为了方便,这里就不详细区分了,仅仅以比较常见的格原创 2008-01-07 16:09:00 · 1114 阅读 · 0 评论 -
.net下基于winpcap实现的网络分析程序(三)
上次说了基础的数据包解析,这次先说UDP包的。上次说到了第33位数据。再往后,如果包头部分还没结束,就是option的内容了。到这里,总共分析过的数据长度为:14位的ip头和一定长度的数据包头。接下来,就从上面说到的地方开始从新计数,仅仅是为了叙述方便。这样,接下来的1,2两位是源IP地址的端口,3,4两位是目的IP地址的端口。5,6两位是UDP包的长度。7,8两位是UDP原创 2008-01-11 17:32:00 · 812 阅读 · 0 评论 -
Huffman编码
未来一段时间我要整理一下数据结构相关的一些东西。包括树,图等等。今天就先从树开始,这次登场的是Huffman树。Huffman编码的目的是,最小化编码的长度,用最小化的编码量,还表达数据信息。比如我们有三个字母要进行编码,分别是a,b,c.。可以分别编码为01,11,10,也可以编码为011,010,001。反之只要能区分出来就可以。但这都不是最小化的编码。其中一种最小化的编码是:0,10原创 2008-04-23 11:03:00 · 2295 阅读 · 0 评论 -
仅仅引用DLL,编译后会是什么样子?
我们在编写程序的时候,经常会引用各种各样的DLL。时间长了,有些DLL可能仅仅是引用了一下而已,其实代码里面根本就没有用到。 那么,这些没有用到的引用,会不会对我们的代码产生影响呢?我也不知道,做个实验试试看好了。 假如,我们写了两个DLL,分别为A和B。其中,A引用了B。不过呢,在A的代码里面,并没有使用到B。现在编译A,然后用ILDasm查看一下。 在ILDasm的界面原创 2008-07-31 14:00:00 · 648 阅读 · 0 评论 -
服务器端的高性能实现(七)——订阅功能的引入
很多时候,我们会需要这样的功能:1,甲告诉乙,你去监控一个值,每个一秒钟向我汇报一次2,甲告诉乙,我现在要去做别的事情了,委托给你一件事情,5秒钟后你去做要实现上面的场景,就需要一种功能。这种功能,有时候我们称为订阅。就像我们在邮局订了杂志一样,每个月,邮局都会主动把杂志给我们送过来,不用我们每个月都去给邮局打个电话,告诉他给我送杂志来。因为这个功能很有用,也很常用,所以我决定把它加入到这个框原创 2008-05-30 11:55:00 · 1068 阅读 · 0 评论 -
Delegate与MutlticastDelegate
前几天,被人问到Delegate与MulticastDelegate。当时被问得有些蒙。为什么呢?因为这个问题,似乎有些扯。 在.net的框架里面,我们可以看到Delegate和MulticastDelegate。Delegate可以接受具有返回值的函数,但是不支持多播委托,也就是说,它只能“装下”一个回调函数。而MulticastDelegate则可以装下多个回调函数,但是对支持的回调原创 2008-08-26 10:53:00 · 596 阅读 · 0 评论 -
c++与C#在类的引用和声明上面的异同
比如我们有个类:class A{...}比较1:A a; //c#版本A *a;//c++版本c#下面,语句“A a;” 等价于c++下面的 A *a;本质上,都是声明了一个指向A的指针,但是指针的内容为空。(c++下面的指针内容不一定为空,具体内容可能是个任意值)如果这个时候就使用a的话,都会出错。错误的原因就是“未将对象的引用指向对象的实例”。比较2:A a = new A();原创 2008-06-11 13:27:00 · 958 阅读 · 0 评论 -
也谈.net下面的new、virtual和override(一)
貌似这几个关键字一直很热,我也凑个热闹,谈一谈,加深一下理解。先看这两个classclass A{ public void T() { Console.WriteLine("A"); }}class B : A{ public new void T() { Console.WriteLine("B"); }}A a1 = new A();A a2 = new B();B b1 =原创 2008-09-04 11:56:00 · 794 阅读 · 1 评论 -
也谈.net下面的new、virtual和override(二)
先看下面的代码:class A{ public void T() { Console.WriteLine("A"); }}class B : A{ public new void T() { Console.WriteLine("B"); }}A a1 = new A();A a2 = new B();B b1 = new B();b b2 = (B)a2;a1.T();a2.T(原创 2008-09-05 12:36:00 · 788 阅读 · 0 评论 -
windows版本的服务器端框架代码已经发布了。
我已经把前阵子做的那个服务器端的框架代码上传到CSDN里面了,这次发布的是windows版本的第一版。欢迎大家去下载。地址是:http://download.csdn.net/user/schumyxp/原创 2008-03-20 11:44:00 · 906 阅读 · 3 评论 -
.net下面的as与“cast”
在.net下面,我们做类型的强制转换有两种方式,比如把对象o转换成A类型的对象:1。 A a = (A)o;2。 A a = o as A;那么这两种方式有什么区别呢?或者说有区分它们的必要么?看了我下面的分析,大家自然就明白了。实际上,对这个问题不能一概而论,需要考虑这样几种情况。第一种情况:o是A的子类。在这种情况下,无论是用方法1还是方法2,效果都是一原创 2007-12-21 16:41:00 · 779 阅读 · 0 评论 -
一个关于.net下面的底层设备调用问题
用.net搭建了一个驱动的类库,然后需要用它调用设备厂商提供的库函数来编写自己的驱动程序,结果遇到了很奇怪的问题。因为设备厂商提供的是一个.h头文件,是给c++用的,.net无法直接引用。于是按照开发手册,直接找到设备的驱动文件xx.dll,本来以为在.net下面直接用DLLImport就可以了,可结果呢,呵呵……首先是Import进来了驱动的load方法,经过调试,结果是调用成功。然原创 2007-04-20 15:48:00 · 843 阅读 · 0 评论 -
服务器端的高性能实现(一)——策划
这么快就过完新年了,又得上班了。新年了,干些什么呢?想做一个服务器端的服务,提供一个高效处理客户端响应的解决方案,锻炼和加强一下以前的技术。这个服务器端有如下需求:1、能支持多个客户端(似乎是废话);2、占用资源尽量低;3、效率尽量高;4、功能扩展方便其他需求:1、使用TCP协议2、在windows下用.net实现一套,同时在linux下用c++实现原创 2008-02-13 14:51:00 · 887 阅读 · 0 评论 -
服务器端的高性能实现(二)——windows下的第一步实现
既然是windows平台下的开发,就简单随个潮流,用VS2005好了,语言是c#。(其实是因为我熟悉这个,嘿嘿)先开始搭建基本的框架吧。现在也没有太多的设计思路,就先一步一步开始吧,也算是个经验的积累。首先创建一个类库的项目,叫什么呢?好的开始可是成功的一半啊,名字问题足足花了我5分钟的时间——汗。最后起了个很俗的名字:Server4Win。顾名思义,就是windows平台下的se原创 2008-02-14 11:03:00 · 992 阅读 · 1 评论 -
服务器端的高性能实现(三)——框架结构的初步调整
在上次,我完成了一个非常简单的小框架。为了后面的开发,现在是对这个框架做些调整的时候了。首先是配置信息的调整。比如IP和端口,这些东西当然不能写死在代码里面了。为此,先在项目里面建立一个文件夹,起名Config。顾名思义,这里面的东西将来都会是配置相关的代码。这次先在里面添加3个文件。第一个叫做ConfigProvider,它的作用是对外提供配置信息。这一次,就让它提供IP原创 2008-02-14 17:32:00 · 970 阅读 · 0 评论 -
lock与Monitor
在多线程开发的时候,lock和monitor是非常常用的东西。以前用的时候没注意过区别。今天反编译了一把,一下明白了,呵呵。下面是lock的代码:lock(this){...}它的IL代码大致如下:callvirt ...Monitor.Enter(object)...leave.s....callvirt ...Monitor.Exit(obj原创 2007-12-03 14:29:00 · 557 阅读 · 0 评论 -
foreach与IEnumerator
都快2008年了,还是看到不少人在辛苦的用着IEnumerator遍历某个数据结构。逢上foreach的“源代码”,希望可以让IEnumrator的funs彻底死心,呵呵。还是反编译(最近好上这个了,呵呵)如下的代码:ArrayList somelist = new ArrayList();foreach(object o in somelist){...}得到原创 2007-12-03 15:36:00 · 925 阅读 · 3 评论 -
Hashtable的同步问题
Hashtable的同步是个老问题了。这几天仔细看了一下Hashtable的实现代码,总算找到了一些答案,下面就聊聊这个。首先说一下同步根(SyncRoot)。网上很多人都在讨论说是要锁table还是锁它。其实,对于非同步的Hashtable,也就是普通的通过new创建的hashtable,SyncRoot就是table它本身。因为这个属性的代码直接的返回了this,this是谁?当然就是原创 2007-12-06 15:04:00 · 1245 阅读 · 0 评论 -
服务器端的高性能实现(五)——对客户端消息的响应和处理
刚从上海回来,竟然又要再去一趟,晕死了。这次我主要添加了处理客户端消息的功能,平台是windows。具体来说,就是添加了两个队列:接收消息队列和等待队列。队列里面都是socket,每个socket对应一个客户端连接。另外,这两个队列都是用链表实现的,实际行为相当于一个循环链表。首先说接收消息队列。如果一个socket有数据可接收,那就把他放到接收队列原创 2008-03-03 21:05:00 · 1165 阅读 · 0 评论 -
foreach与hashtable
声明:这可能是个火星贴!今天发现了一个小技巧,是关于hashtable的。其实不能说是发现,而应该说是以前太大意了没有注意到。我们知道hashtable里面保存的都是“键值对”。我们有时候需要键,有时候需要值,还有的时候两个都需要。有没有方便的办法可以分别获取这些内容呢?答案是当然有啦。取得键:foreach(object obj in someHashtable.Keys)原创 2007-12-13 15:53:00 · 1774 阅读 · 1 评论 -
服务器端的高性能实现(六)——状态机和线程池的引入
上一次,我添加了调度队列。这次,我将加入状态机以及线程池。我先来说一说状态机,然后再说线程池。写代码也是在干工作。既然干工作,就是为了解决问题。那加入状态机,有什么作用呢?或者说解决了什么问题呢?首先,没有状态机可以不?当然可以,而且没有任何问题,就像我前面的代码一样。加入状态机,就是为了让程序的逻辑更加清楚,运行更加灵活,同时也可以带来更高的效率。不过事情总是两面的,加入状态机后,程原创 2008-03-13 09:17:00 · 2298 阅读 · 0 评论 -
我们用了多少内存之string
我们大家都知道,如果我们声明了一个变量或者对象,内存里面首先会有一个指针,指向具体的内容。比如说,我声明了一个字符串“hello”,那就有一个字符串指针指向这个字符串。在32位系统下,这个指针就是32位的,占了我4个字节的空间。字符是16位的,hello一共5个字母,又占了我10个字节。那是不是说,这个字符串就占了我14个字节呢? 我不知道。动手找答案吧! 下面的讨原创 2008-12-29 11:44:00 · 851 阅读 · 0 评论