C#网络编程(完整书签).

所需积分/C币:30 2016-11-04 15:53:37 2.12MB PDF
收藏 收藏 2
举报

C#网络编程入门书籍,讲解详细,高清无码,喜欢的可以下载。
目录 前言 第1章进程、线程与网络协议. 1.1进程和线程 1.1.1 Process类… 1.1.2 Thread类 1.1.3在个线程中操作另个线程的控件 1.2IP地址与端口 1.2.1 TCP/IP网终协议 1.2.2 IPAddress类与Dns类… 17 123 IPHostEntry类 1.24 IPEndPoint类 1.3套接字 3. I Socket类 20 1.3.2面向连接的套接字 21 1.3.3无连接的套接字 14网络流 124 1.5习题1 第2章TCP应用编程 2.1同步TCP应用编程 28 2.1.1使用套接字发送和接收数据. 2.1.2使用 Network Strean对象发送和接收数据 21.3 Tcp Client与 TcpListener类 214解决TCP协议的无消息边界问题 22利用同步TCP编写网络游戏 2.2.1服务器端编程 34 222客户端编程. 49 23异步TCP应用编程… 23.1 Event waithandlc类 232 AsyncCallback委托 233 BeginAcceptTcpClient方法和 EndAccept Client方法 70 234 Begin Connect)法和 EndConnect方法… 2.3.5发送数据 …71 23.6接收数据 24异步TCP聊天程序 73 24.1服务器端设计… ∴…73 242客户端设计 79 2.5↓题 第3章UDP应用编稈 84 3.1UDP协议基础知识 ··· 3.2UDP应用编程技术 84 32.1 UdpClicnt类 84 322发送和接收数据的方法 3.3利用UDP协议进行广播和组播. 3.3.1通过 Internet实现群发功能 3.32在 Internet上举行网终会议讨论 习题 101 第4章P2P应用编程 102 4.1P2P基础知识. 42P2P应用举例 I04 4.3匀题4 · 第5章SMTP与POP3应用编程 5.1通过应用程序发送电了邮件 115 5.1.1SMTP协议 115 5.1.2发送邮件 l16 52利用同步TCP接收电子邮件 120 5.21POP3工作原理 121 5.22邮件接收处理 123 53习题5 127 第6章网终数据加密与解密 6.1对称加密 128 62不对称加密 13 63通过网络传递加密数据 137 64Hash算法与数字签名.… .153 65习题6 154 第7章二维设计与多媒体编程…… 154 7.1简单的3D设计入门… a;;a“垂 15 7.2 Directx基础知识 721左手坐标系与右手坐标系 161 7.22设备 161 723顶点与顶点缓冲 162 724Mesh对象 72.5法线 163 7.2.6纹理与纹理映射.… 163 7.27世界矩阵、投影矩阵与视图矩阵. 163 72.8背面剔除. ∴…164 7. 3 Primitive .165 7. 4 Mesh 172 7.5灯光与材质 ··· 177 7.6音频与视频, 187 77直接使用 SoundPlayer类播放WAV音频文件 192 78小题 …194 第8章上机实验指导 194 81实验一简单网络聊天系统 .195 82实验二內络呼叫应答提性系统. 196 8.3实验三文廾数据加密与解密 .200 前言 在 nternet和计算机技术高速发展的时代,处处都有网络的影子。在网络无处不在的坏境 下,仟何一种开发和编程都不可避免的涉及到网络应用。网终办公、网络游戏、网络电视、电 子商务、网络资源搜索、邮件处理、千姿百彩的网站、杂忐订阅、远程控制…,以及其它各 种网络相关的应用软件,都是恻络应用编程的实际应用。早期的恻络编程难度大、效率低,使 初学者望而生思,而(#(读作 C Sharp)和NFT(读作 dot nct)平台大大地简化了这些技术 使过去困难的网络应用编程变得非常轻松 目前,很多高校计算机及相关专ψ都开设了网络应用编稈方面的课稈。在:就ψ压丿日益増 大以及学生对所学知识与社会实际需求紧密结合的迫切要求的情况下,本书涉及的内容和知识 面显得尤为重要。 Microsoft visual studio2005(简称S2005)是微软公司最新推出的先进的可视化开发T 具。20035年底,微软隆重发布了VS2005英文版,并于2060年发布了ⅤS2005简体中文版。 本书以VS2005 Professional简体中文版为开发环境,以易学易用为重点,充分考虑了学以致用 和社会实际需求,用大量的实例,引导读者快速掌握用C#进行各类网络应用程序的编程方法 和技巧。使学生学丬木书内容后能立即编写出与企事业实际应用紧密结合的程序,避免说起来 似懂非懂,做起来小步难行的尴尬局面。 #是在C、C++和Java基础上开发的在NET平台上运行的为适应 Internet、 Intranet和各 类网络应用而设计的编程语言,该语言综合了C、C++和Java以及其他高级语言的优点,是 种语法优雅、类型安全、完全面向对象的编程语言。由于C#是专门为NFT平台而设计的开发 语言,并」2001年由ECMA( European Computer Manufactures Association,欧洲计算机制造 商协公)规定为高级语言开发标准(ECMA-334),2003年被ISO( International Standards Organization,国际标准化组织)规定为国际标准( ISO/EC23270),因此它比任何在NET平 台下提供的其他开发语言都有无可比拟的优越性。毫无疑问,随肴NET技术的普及,C#必将 成为开发 Internet和企业级应用程序的首选程序设计语言。 本书的所有程序均在Vs2005 Professiona简体中文版丌发环境下调试通过。是·本非常实 用的学习C#网终高级应用编程的教材。读者通过阅读、上机练习和调试运行,能快速理解用 C进行各类髙级应用编程的方法和技巧。另外,由于本书的内容是在《C#网络应用编程基础》 (马骏主编,人民邮电出版社)介绍的基础知识之上进一步介绍史为复杂的高级应用编程方法 和技巧,因此需要读者有一定的C#语言编程基础。 本书由马骏编著。参与编写和代码调试等工作的还有陈明、王芳、杨韶华、张端青、郑珂 等。人民邮电出版社的邹文波编辑对本书编写给予了大力支持、指导和帮助,在此表示深深的 谢意。 由于编者水半有限,书中难免存在错误之处,敬请读者批评指正。 编者 2006年 第1章进程、线程与网络协议 在 Windows应用程序中,基于客户端和服务器的各种网络编程技术应用非常广泛,本书 将逐步介绍这类应用程序的编程方法。 在《C#网络应用编程基础》(马骏主编,人民邮电出版社)一书中,我们已经学习了C# 面向对象编程的基础知识以及基本控件的用法。本书假定读者对相关基本内容比较熟悉,并在 此基础上,进一步学习更为复杂的基于 Windows窗体的高级应用开发,而不再介绍C#语法以 及控件的用法等基础内容。如果读者对C#相关知识不太熟悉,请首先阅读《C#网络应用编程 基础》一书。 本章主要介绍进程、线程、I地址与端口、套接字以及网络流等基本知识,这部分内容 是学习木书后面章节的基础,希望读者能很好的理解和掌握。 进程和线程 进程是对一段静态指令序列(程序)的动态执行过程,是系统进行资源分配和调度的一个 基本单位。与进程相关的信息包括进程的用户标志、正在执行的凵经编译好的程序、进程程序 和数据在有储器中的位置等等。同一个进程又可以划分为若干个独立的执行流,我们称之为线 程。线程是CPU调度和分配的基本单位。在 Windows环境下,用户可以同时运行多个应用程 序,每个执行的应用程序就是一个进栏。例如一台电脑上同时打开两个QQ时,每个运行的 QQ就是一个进程;而用一个QQ和多个人聊天时,每个聊天窗口就是一个线程。 进程和线程概念的提岀,对提高软件的并行性有着重要的意义。并行性的主要特点就是并 发处理。在一个单处理器系统中,可以通过分时处理来获得并发,这种情况下,系统为每个线 程分配一个CPU时间片,每个线程只有在分配的时间片内才拥有对CPU的控制权,其他时间 都在等待。即同一时间只有一个线程在运行。由于系统为每个线程划分的时间片很小(20毫 秒左右),所以在用户看来,好像是多个线程在同时运行。 为什么要使用多线程呢?考虑这样·种情况:在C/S模式下,服务器需要不断监听来自 各个客户端的请求,这时,如果采用单线程机制的话,服务器将无法处理其他事情,囚为这个 线程要不断的循环监听请求而无暇对其他请求做出响应。实际上,当要花费大量时间进行连续 的操作时,或者等待网络或其他O设备响应时,都可以使用多线程技术 在C#中,有两个专门用于处理进程和线程的类:Proc类和 Thread类 Process类 Process类位于 System Diagnostics命名空间下,用于完成进程的相关处理任务。可以在本 地计算杋上启动和停止进程,也可以查询进程的相关信息、。在自凵的程序中运行其他的应用程 序,实际上就是对进程进行管理。如果希望在自己的进程中启动和停止其他进程,首先要创建 Process类的实例,并设置对象的 StartInfo属性,然后调用该对象的 Start方法启动进程。 【例1-1】启动、停止和观察进程 (1)新建一个名为 Process Example Ik] Windows应用程序,设计界面如图1-1所示。 (2)展开工具箱中的【组件】选项卡,然后将r Process组件拖放到设计窗体上。 (3)在代码的开始部分添加命名空间引用 using System Diagnostics g (4)分别在【启动记事本】【停止记事本】和【观 察所有进程】三个按钮的 Click事件中添加代码: 启动记丰」 停止订事本」 烈京所有止程」 private d button Start Click( EvcntArgs c) 图1-1测试进程界面 process. StartInfo FileName-"notepad.exe 启动 Notepad. exe进程 1. Start: private void button Stop Click(object sender, EventArgs 创建新的 Process组件的数组,并将它们与指定的进程名称( Notepad)的所有进程资源相关联 P myprocesses-=Process. GetProcesses ByName("Notepad") foreach(Process instance in myprocesses ∥设置终止当前线程前等待1000毫秒 instance WaitForExit(1000) instance. Close Main Window private void button View Click(object sender, EventArgs e listBox Items. Clear O //创建 ocess类型的数组,并将它们与系统内所有进程相关联 Pr processes processes- Process. Ge LProcesses o) foreach(Process p in processes) dle指显示CPU空闲率的进程名称 于访问Jdl的 StartTime会出现异常,所以将其排除外 if (p Process Name ! ="Idle //将每个进程名和进程开始时间加入1 lisTbox1中 this.listBox1Items Add( string. Format([0, -30)(1: h: m: s", p. ProcessName, p Start Time)) (5)按<5>键编译并执行,单击几次【启动记事本】按钮,观察打开的每个进程,然后单 击【停止记事本】,观察依次停止进程的情况。 由于安装 Windows操作系统后, notepad.exe就已纾安装到系统文件夹下,而在任何 个文件夹中均可以直接运行,所以在这个例了中,我们选择了调用 notepad.exe作为演示的例 子。实际上,任何一个可执行文件均可以通过这种方法调用,读者可以自行尝试调用其他可执 行文件,并观察执行效果。 1.1.2 Thread类 在 System. Threading命名空间下,包含了用于创建和控制线程的 Thread类。对线程的常 用操作有:启动线程、终止线程、合并线程和让线程休眠等 启动线程 在使用线程前,首先要创建一个线程。其一般形式为: Thread t=new Thread(enterPoint): 其中 enter point为线程的入口,即线程开始执行的方法。在托管代码中,通过委托处理线 程执行的代码。例如 Thread tnew Thread (new ThreadStart(methodS ame) 创建线程实例后,就可以调用 Start方法启动线程了。 2.终止线程 线程启动后,当不需要某个线程继续执行的时候,有两种终止线程的方法 种是事先设置一个布尔变量,在其他线程中通过修改该变量的值作为传递给该线程是否 需要终止的判断条件,而在该线程中循环判断该条件,以确定是否退出线程,这是结束线程的 比较好的方法,实际编程中一般使用这种方法。 第二种方法是通过调用 Thread类的 abort方法强行终止线程。例如: taborto Abort方法没有任何参数,线程一旦被终止,就尢法冉重新启动。由于 Abort通过抛出异 常强行终止结束线程,因此在实际编程中,应该尽量避免采用这种方法 调用Abot方法终止线程时,公共语言运行库(CLR)会引发 ThreadAbortException异常, 程序员可以在线程中捕获 ThreadAbortException异常,然后在异常处理的 Catch块或者 Finally 块屮作释放资源等代码处理工作;但是,线程屮也可以不捐获 ThreadAbortException异常,而 由系统自动进行释放资源等处坦工作。 注意,如果线程中捕获了 ThrcadabortExccption异常,系统在 finally子句的结尾处会再次 引发 ThreadAbortException异常,如果没有 finally了句,则会在 Catch子句的结尾处再次引发 该异常。为∫避免冉次引发异常,可以在 finally子句的结尾处或者 Catch子句的结尾处调用 System. Threading ThreadResetAbort)法防止系统再次引发该异常。 使用Abor方法终止线程,调用 abort方法后,线程不一定会立即结束。这是因为系统在 结束线程前要进行代码清理等工作,这种机制可以使线稈的终止比较安全,但清理代码需要 定的时间,而我们并不知道这个⊥作将需要多长时间。因此,调用了线程的 abort方法后,如 果系统自动凊理代的工作没有结束,可能会出现类似死机一样的假象。为∫解决这个问题, 可以在上线程中调用子线程对象的Join方法,并在Join方法中指定上线程等待子线程结束的 等待时间。 3.合并线程 Join方法用于把两个并行执行的线程合并为一个单个的线程。如果一个线程t在执行的 过程中需要等待另一个线程结束后才能继续执行,可以在t1的栏序模块中调用t2的jin 方法。例如: 12.Join() 这样t在执行到t2 Join语句后就会处于阻塞状态,直到t2结束后才会继续执行 但是假如t2一直不结束,那么等待就没有意义了。为了解决这个问题,可以在调用t2的 Join方法的时候指定一个等待时间,这样t这个线程就不会一直等待下去了。例如,如果希 望将t合并到t后,t只等待100毫秒,然后不论t是否结束,t都继续执行,就可以在t1 中加上语句: t2Join(100); Join方法通常和 abort一起使用。 由于调用某个线程的 Abort方法后,我们尢法确定系统清理代似的工作仆么时候才能结 束,因此如果希望上线程调用了子线程的 Abort方法后,主线程不必一直等待,可以调用子线 程的Join方法将了线程连接到主线程中,并在连接方法中指定个最大等待时间,这样就能 使主线程继续执行了 4.让线程休眠 在多线程应用程序中,有时候并不希望某一个线程继续执行,而是希望该线程暂停一段时 间,等待其他线程执行之后再继续执行。这时可以调用 Thread类的Slep方法,即让线程休 眠。例如 hrcad.Sccp(1000): 这条语句的功能是让当前线程休眼1000毫秒 注意,调用 Sleep方法的是类本身,而不是类的实例。休眠的是该语句所在的线程,而不 是其他线程 5.线程优先级 当线程之间争夺CPU时间片时,CPU是按照线程的优先缴进行服务的。在C#应用程序 中,可以对线程设定五个不同的优先级,由高到低分别是 Highest、 abovenormal、 Normal、 Belownormal和 Lowest。在创建线程时如果不指定其优先级,则系统默认为 Normal。假如想 让一些重要的线程优先执行,可以使用下面的方法为其赋予较高的优先级: Thread t=new Thread(new ThreadStart(centerpoint)) t. priority-ThreadPriority AboveNormal 通过设置线程的优先级可以改变线程的执行顺序,所设置的优先级仅仅适用于这些线程所 属的进程。 注意,当把某线程的优先级设置为 Highest时,系统上正在运行的其他线程都会终止,所 以使用这个优先级别时要特别小心。 6.线程池 线程池是一种多线程处理形式,为了提高系统性能,在许多地方都要用到线程池技术。例 如,在一个CS模式旳应用程序中的服务器端,如果每到一个凊求就创建一个新线程,然后 在新线程中为其请求服务的话,将不可避免的造成系统开销的增大。实际上,创建太多的线程 可能会导致由于过度使用系统资源而耗尽内存。为了防止資源不足,服务器端应用程序应采取 定的办法来限制同一时刻处理的线程数目。 线程池为线程生命周期的开销问题和资源不足问题提供了很好的解决方案。通过对多个任 务重用线程,线程创建的开销被分摊到∫多个任务上。其好处是,由于请求到达时线程已经存 在,所以无意中也就消除了线程创建所带来的延迟。这样,就可以立即为新线程请求服务,使 10

...展开详情
试读 127P C#网络编程(完整书签).
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    C#网络编程(完整书签). 30积分/C币 立即下载
    1/127
    C#网络编程(完整书签).第1页
    C#网络编程(完整书签).第2页
    C#网络编程(完整书签).第3页
    C#网络编程(完整书签).第4页
    C#网络编程(完整书签).第5页
    C#网络编程(完整书签).第6页
    C#网络编程(完整书签).第7页
    C#网络编程(完整书签).第8页
    C#网络编程(完整书签).第9页
    C#网络编程(完整书签).第10页
    C#网络编程(完整书签).第11页
    C#网络编程(完整书签).第12页
    C#网络编程(完整书签).第13页
    C#网络编程(完整书签).第14页
    C#网络编程(完整书签).第15页
    C#网络编程(完整书签).第16页
    C#网络编程(完整书签).第17页
    C#网络编程(完整书签).第18页
    C#网络编程(完整书签).第19页
    C#网络编程(完整书签).第20页

    试读已结束,剩余107页未读...

    30积分/C币 立即下载 >