C# 线程手册 第七章 网络和线程

概述

  在本书的之前章节,我们已经深入地了解了C#.NET 中的线程并探讨了多线程编程中的不同概念和技术。现在你已经是一个线程专家啦,我们将要使用C#实现一个简单的多线程客户端-服务端程序并在其中使用一些我们到目前为止讨论过的概念。

  多一些应用来说,高效地使用线程和异步编程是不可或缺的,比如网络通信,高效用户接口以及磁盘输入/输出等等。在所有这些情况下,如果使用单线程的话程序可能会卡死或者在等待一个操作完成的过程中崩溃。对那些网速比较慢的用户来说,一个网络程序的延迟时间是最重要的衡量标准。在本章的示例程序中,我们将要使用System.Net 命名空间并简要地了解下.NET 的网络能力,尤其是对具有多用户和异步特性的网络程序来说,使用线程是毋庸置疑的。

  我们将讨论以下内容:

  1. 使用System.Net 命名空间开发网络程序

  2. 基于TCP/IP 开发一个简单的客户-服务端程序

  3. 使用.NET 功能实现异步操作

  4. 在一个客户端和一个远程服务端之间使用异步消息传输

.NET 中的网络

  在.NET Framework 之前, 开发基于Windows 平台的网络程序就仅限于使用难以理解的WinSock 库的C++高级程序员。当然Wintel平台下使用Visual Basic 的开发人员也可以开发出一些相对简单的任务。其他语言提供一些额外的功能。然而,一个开发人员在使用由这些语言提供的简单的、有限的服务时会遇到很多功能障碍,因此不得不进行很多次尝试。

幸运的是,.NET Framework 中的System.Net 命名空间带来了一系列以一种简单的、一致的对象模型包装好的高效功能集合。这些类的易用性并未导致功能的减少,WinSock 2.0 中几乎所有的核心功能都被System.Net命名空间包装和抽象出来。开发人员可以很容易地开发从套接字直到HTTP间任何层级的程序。和原生的WinSock 类不同,System.Net 命名空间将开发人员从自己亲自动手实现很多迫切的资源管理任务的“快乐”中解放出来,比如处理IO重叠和端口完全性。

  嗯,事不宜迟,我们现在就来看看System.Net 命名空间。

System.Net 命名空间

  System.Net 命名空间事实上有两个命名空间组成,System.Net 和 System.Net.Socket.

  我们从System.Net.Socket 命名空间开始。System.Net 命名空间中的类的分层解决方案允许应用程序按照需要使用控件的多种层次来访问网络。除了支持套接字,System.Net 类也提供一个令人印象深刻的功能集合来使用HTTP协议。对大多数情况来说,System.Net 提供三层架构,应用层协议,传输层协议和网络协议。System.Net.Sockets 命名空间由很多初始类和实现组成,可以用来处理传输协议。让我们看看System.Net 命名空间中的很多重要的类,如下表所示:

2012-5-6 9-34-19

  你可以看到,System.Net 命名空间包含了很多对站点和网络编程非常有用的类和实现。

System.Net.Sockets 命名空间

  System.Net.Sockets 命名空间关注传输层:套接字包含了一系列复杂的类。这些类在抽象与套接字编程过程相关的复杂任务中做了出色的工作,它们提供了一个有力且高效的套接字堆栈并向下兼容伯克利套接字。最后,对TCP和UDP的内建支持被很好地集成在System.Net.Sockets 类中。下表列出了System.Net.Sockets命名空间中的类。

2012-5-6 9-53-35

  一个多种不同层次的控件提供给了开发人员,比如用于系统底层的Socket 类,用于系统上层的TcpClient类,它们提供了易于使用的特性和更多功能。更多内容已经超出了本书的范畴(可以参考《专业.NET 网络编程》),这里我们仅详细地看一下上面的这些类,因为我们稍后要使用它们设计并开发我们的示例程序。

下一篇通过一个示例程序介绍C# 线程手册 中所囊括的所有内容…


作者:DanielWise
出处:http://www.cnblogs.com/danielWise/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/danielWise/p/2485640.html