C#.Net网络程序开发-Socket篇(转)
Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要。 抛开ISO/OSI模型的7层构架,单从TCP/IP模型上的逻辑层面上看,.Net类可以视为包含3个层次:请
C#基础—关于类(转)
类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了每个对象可以包含什么数据和功能,但类自己不能包含数据。比如一个类代表一个人,它就可以定义所以人相关的信息(身高、年龄、体重等)。使用时,事例化对象表示某一个人。类的成员可以分为两大类类本身所声明的以及从基类中继承而来的类的成员有以下类型􀁺 成员常量,代表与类相关联的常量值􀁺 域,即类中的变量􀁺 成员方法,复杂执行类中的计算和其它操作􀁺 属性,用于定义类中的值并对它们进行
漫谈C#编程中的多态与new关键字之二(转)
3. new:封印咒术 new 似乎给人一种这样的感觉,它的使用者喜欢打破别人的约定,然而,如果使用恰当,new 可以弥补基类设计者的“短见”。在 Creating a Data Bound ListView Control 中,Rockford Lhotka 就示范了如何封印原来的 ListView.Columns,并使自行添加的返回 DataColumnHeaderCollection 的 Columns 取而代之。 从 Output #01 中我们可以看到,new 只是把 Base.PrintStatus 封印起来而不是消灭掉,你可以解除封印然后进行访问。对于 Derived2 的使用者,解封的方法是把 Derived2 的实例转换成 Base 类型:// Code #06Bas
漫谈C#编程中的多态与new关键字之一(转)
1. 你通常怎样用多态? 假设我有一个类,里面有一个 PrintStatus 方法,用于打印实例的当前状态,我希望该类的派生类都带有一个 PrintStatus 方法,并且这些方法都用于打印其实例的当前状态。那么我会这样表达我的愿望: // Code #01class Base{ public virtual void PrintStatus() { Console.WriteLine("public virtual void PrintStatus() in Base"); }} 于是我可以写一个这样的方法:// Code #02public void DisplayStatusOf(Base[] bs){ foreach (Base b in bs) { b.PrintStatus(); }} bs 中可能包
c#摄氏华氏转换(转)
private void buttonCtoF_Click(object sender, System.EventArgs e) { double c=0,f; try//用抛出异常检验输入错误,可代替正则。 { c=Convert.ToDouble(textBox1.Text.ToString());}//Convert转换函数,用起来简单方便 catch(Exception) { textBox1.Clear(); label2.Text="请输入数字!"; label2.Visible=true; return;//一定要有返回,不然仍会执行下面代码 }; f=1.8*c+32;//摄氏转华氏公式 label2.Text="摄氏"+c+"度转化为华氏度为:"+f; label2.Visible=true;
总结C#中得到程序当前工作目录和执行目录的一些方法(转)
1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径。2. System.Environment.CurrentDirectory 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。3. System.IO.Directory.GetCurrentDirectory() 获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,有可能程序放在C:www里,这个函数有可能返回C:Documents and SettingsYB,或者C:Program FilesAdobe,有时不一定返回什么东东,我也搞不懂了。4. System.AppDomain.CurrentDomain.BaseDirectory 获取程
用c#监控网络流量(转)
以下的代码的原作是opensource的一个叫sniffer.net的,用vb.net写的,这里只是简单的用c#翻译了一下,暂时还只能监控所有数据包,不能监控某一个进程的数据包,代码如下:using System;using System.Text;using System.Net;using System.Net.Sockets;using System.Runtime.InteropServices; namespace UpdateTester{ /**//// <summary> /// Monitor 的摘要说明。 /// </summary> public class Monitor { public delegate void NewPacketEventHandler(Monitor m, Packet p); public event NewPacketEventHandler NewPacket;
字符串和字节数组之间的转换(转)
6. 字符串和字节数组之间的转换 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了。为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding。该类提供了 bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将字节数组转换成字符串。 System.Text.Encoding 类似乎没有可用的构造函数,但我们可以找到几个默认的 Encoding,即 Encoding.Default(获取系统的当前 ANSI 代码页的编码)、Encoding.ASCII(获取 7 位 ASCII 字符集的编码)、Encoding.Un
C# 中的类型转换之转换成十六进制(转)
8. 转换成十六进制任何数据在计算机内部都是以二进制保存的,所以进制与数据的存储无关,只与输入输出有关。所以,对于进制转换,我们只关心字符串中的结果。在上面的第 4 条中提到了 ToString() 方法可以将数值转换成字符串,不过在字符串中,结果是以十进制显示的。现在我们带给它加一些参数,就可以将其转换成十六进制——使用 ToString(string) 方法。这里需要一个 string 类型的参数,这就是格式说明符。十六进制的格式说明符是 "x" 或者 "X",使用这两种格式说明符的区别主要在于 A-F 六个数字:"x"
C# 中的类型转换之日期型数据和长整型数据之间的转换(转)
9. 日期型数据和长整型数据之间的转换为什么要将日期型数据转换为长整型数据呢?原因很多,但就我个人来说,经常将它用于数据库的日期存储。由于各种数据库对日期型的定义和处理是不一样的,各种语言对日期型数据的定义的处理也各不相同,因为,我宁愿将日期型数据转换成长整型再保存到数据库中。虽然也可以使用字符串来保存,但使用字符串也会涉及到许多问题,如区域等问题,而且,它需要比保存长整型数据更多的空间。日期型数据,在 C# 中的参与运算的时候,应该也是转换为长整型数据来运算的。它的长整型值是自 0001 年 1 月 1 日午夜
C# 中的类型转换之各种数值类型和字节数组之间的转换(转)
7. 各种数值类型和字节数组之间的转换在第 1 条中我们可以查到各种数值型需要使用多少字节的空间来保存数据。将某种数值类型的数据转换成字节数组的时候,得到的一定是相应大小的字节数组;同样,需要把字节数组转换成数值类型,也需要这个字节数组大于相应数值类型的字节数。现在介绍此类转换的主角:System.BitConverter。该类提供了 byte[] GetBytes(...) 方法将各种数值类型转换成字节数组,也提供了 ToInt32、ToInt16、ToInt64、ToUInt32、ToSignle、ToBoolean 等方法将字节数组转换成相应的数值类型。由于这类转换通常只是在需要进行
C# 中的类型转换之字符串和字符数组之间的转换(转)
5. 字符串和字符数组之间的转换字符串类 System.String 提供了一个 void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。如下例:private void TestStringChars() {string str = "mytest";char[] chars = str.ToCharArray();this.textBox1.Text = "";this.textBox1.AppendText("Length of "mytest" is " + str.Length + " ");this.textBox1.AppendText("Length of char array is " + chars.Length + " ");this.textBox1.AppendText("char[2] =
C# 中的类型转换之数值字符串和数值之间的转换(转)
4. 数值字符串和数值之间的转换首先,我们得搞明白,什么是数值字符串。我们知道,在 C# 中,字符串是用一对双引号包含的若干字符来表示的,如 "123"。而 "123" 又相对特殊,因为组成该字符串的字符都是数字,这样的字符串,就是数值字符串。在我们的眼中,这即是一串字符,也是一个数,但计算机却只认为它是一个字符串,不是数。因此,我们在某些时候,比如输入数值的时候,把字符串转换成数值;而在另一些时候,我们需要相反的转换。将数值转换成字符串非常简单,因为每一个类都有一个 void ToString() 方法。所有数
C# 中的类型转换之数值类型之间的相互转换(转)
2. 数值类型之间的相互转换这里所说的数值类型包括 byte, short, int, long, fload, double 等,根据这个排列顺序,各种类型的值依次可以向后自动进行转换。举个例来说,把一个 short 型的数据赋值给一个 int 型的变量,short 值会自动行转换成 int 型值,再赋给 int 型变量。如下例:private void TestBasic() {byte a = 1; short b = a; int c = b;long d = c; float e = d; double f = e;this.textBox1.Text = "";this.textBox1.AppendText("byte a = " + a.ToString() + " ");this.textBox1.AppendText
C# 中的类型转换之装箱、拆箱(转)
C# 出来也有些日子了,最近由于编程的需要,对 C# 的类型转换做了一些研究,在学习中整理了一份在这里与大家分享,很适用哦!其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之 间的转换、字符串和字符数组/字节数组之间的转换、各种数值类型和字节数组之间的转换、十六进制数输出以及日期型数据的一些转换处理。1. 装箱、拆箱还是别名许多 C# 的书上都有介绍 int -> Int32 是一个装箱的过程,反之则是拆箱的过程。许多其它变量类型也是如此,如:short <-> Int16,long &
C++与C#混合生成.NET程序(转)
本文提供了一个方法,让C++源码和C#源码一起编译链接成一个单一的Assembly。 由于C++提供了IJW方法,允许将旧有C++代码也编译成托管代码,因此这篇小文可以用极小的工作量来彻底解决所有C++遗留代码移植到.NET的问题。 这个方法,再加上前次的小文《您也使用托管C++吗?》,就可以把C++遗留代码移植到.NET的所有方法一网打尽了。 好了,言归正传。 假设一个很简单的C++程序,它只有一个函数://c.h#pragma onceint sqr(int n); //c.cpp#include "c.h"int sqr(int n){ return n*n;} 为了能让它与C#共同工作,必
在C#中使用可空类型(转)
可空类型是System.Nullable结构体的实列。一个可空类型代表了相应值类型的正确范围附加null值。例如Nullable<Int32>的取值范围应该是-2147483648到2147483647外加null。Null<bool>的取值为true,false和null。这种方法一般在处理数据库的时候用到,因为数据库里面可能含有没有赋值的值类型。class NullableExample{ static void Main() { int? num = null; if (num.HasValue == true) { System.Console.WriteLine("num = " + num.Value); } else {
C# 中启动进程的三种方法(转)
1.启动子进程,不等待子进程结束private void simpleRun_Click(object sender, System.EventArgs e){ System.Diagnostics.Process.Start(@"C:listfiles.bat");}2.启动子进程,等待子进程结束,并获得输出 1private void runSyncAndGetResults_Click(object sender, System.EventArgs e) 2{ 3 System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@"C:listfiles.bat"); 4 psi.RedirectStandardOutput = true; 5 psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hid
用Visual C++干干净净地清除进程(转)
读者朋友们可能经常会碰到这样一个问题,想对某些进行操作时,发现这些文件正在被其它程序使用,处于打开状态,而且是被独占打开,这时是没法对文件进行操作的。因此,要想操作这些文件,必须将打开这些文件的进程清除掉。那么如何干净地清除进程呢?其实,在Windows2000操作系统版本中有一个工具程序叫tskill.exe,用它就可以清除掉某个程序的进程,在输入"tskill 程序名"后就可以清除其运行实例。但是如何要在代码里实现tskill的功能该如何做呢?针对这一问题,本实例介绍了在Windows2000下实现的方法。 一、实现方法
关于C#静态构造函数的几点说明(转 )
静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。 以下是引用片段: class SimpleClass { // Static constructor static SimpleClass() { // } } 在使用静态构造函数的时候应该注意几点: 1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符