C#网络编程复习资料汇编学生Word格式.docx
- 文档编号:22955737
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:20
- 大小:31.98KB
C#网络编程复习资料汇编学生Word格式.docx
《C#网络编程复习资料汇编学生Word格式.docx》由会员分享,可在线阅读,更多相关《C#网络编程复习资料汇编学生Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
28、Action委托封装了不带返回值的方法,有0~16个输入参数,返回类型为void。
29、Func委托封装了带返回值的方法,有0~16个输入参数,返回类型为TResult。
30、异步模式的最大优势是不会阻止对用户界面操作的响应。
31、async关键字是一个修饰符,只能用在异步方法或者事件处理程序的签名中。
32、await关键字是一个运算符,可将其用在表达式中,表示等待异步执行的结果。
33、await运算符是对方法的返回值进行操作,而不是对方法本身进行操作。
34、await运算符的代码必须放在异步方法的内部。
35、并行是指同时执行多个工作任务。
36、从业务实现的角度看,并行编程模型分为数据并行和任务并行。
37、任务并行库是基于任务的并行编程模型。
38、数据并行和任务并行都是利用System.Threading.Tasks.Parallel类来实现。
该类的For和ForEach方法用于数据并行,Invoke方法用于任务并行。
39、任务调度是通过System.Threading.Tasks命名空间下的TaskScheduler类实现的。
它的用途是确保安排的所有任务都能按照计划执行。
40、XML/可扩展的标记语言是一套用文本来定义语义标记的元标记语言。
41、WebService体系结构基于服务提供者、服务请求者、服务注册中心3个角色,利用发布、发现、绑定3个操作来构建。
42、SOAP/SimpleObjectAccessProtocol/简单对象访问协议是一种基于XML、以HTTP作为基础传输协议的消息交换协议。
43、WSDL/WebServiceDescriptionLanguage/Web服务描述语言用于描述Web服务提供的方法以及调用这些方法的各种方式。
44、MQ/MessageQueue/消息队列是在多个不同的应用程序之间实现相互通信的一种基于队列和事物处理的异步传输模式。
45、在WCF中,EndPoint/终结点用于确定网络通信的目标。
46、对于WCF,终结点由地址、协定和绑定组成。
47、WCF通过绑定来定义WCF客户端和WCF服务端之间通信的方式。
48、服务协定是通过ServiceContract和OperationContract特性声明的。
49、数据协定是通过DataContract和DataMember特性声明的。
50、在TCP/IP体系结构中,HTTP属于应用层传输协议。
51、WCF双工通信由服务和回调两个接口组成。
二、问题解析
1、什么套接字?
它有哪几种分类?
答:
套接字是支持TCP/IP网络通信的基本操作单元,是不同主机间的进程进行通信的端点。
在一个套接字实例中,既保存了本机的IP地址和端口,也保存了对方的IP地址和端口,同时也保存了双方通信采用的网络协议等信息。
套接字有3种类型:
流式套接字、数据报套接字和原始套接字。
流式套接字用来实现面向连接的TCP通信,数据报套接字实现无连接的UDP通信,原始套接字实现IP数据报通信。
2、简述C#实现多线程资源同步的几种机制。
C#多线程中实现资源同步主要是通过加锁或者原子操作来实现。
(1)用volatile修饰符锁定公共或私有字段。
利用该修饰符可直接访问内存中的字段,而不是将字段缓存在某个处理器的寄存器中。
这样做的好处是所有处理器都可以访问该字段最新的值。
(2)用Interlocked类提供的静态方法锁定局部变量。
Interlocked类通过加锁和解锁提供了原子级别的静态操作方法,对并行执行过程中的某个局部变量进行操作时,可采用这种办法实现同步。
(3)用lock语句锁定代码块
C#提供了一个lock语句,该语句能确保当一个线程完成执行代码块之前,不会被其他线程中断。
被锁定的代码块称为临界区。
lock语句的实现原理是进入临界区之前先锁定某个私有对象(声明为private的对象),然后再执行临界区中的代码,当代码块中的语句执行完毕后,再自动解除该锁。
3、简述进程、应用程序域与线程之间的区别与联系。
(1)进程是操作系统的基本管理单元。
执行某个程序时,操作系统将程序加载到内存中,为其分配运行时所需要的资源,并对这些资源进行基本的内存边界管理。
多进程的资源消耗大、控制细节复杂。
(2)一方面,应用程序域是在应用程序级别使用的功能,是一个轻量级的进程管理。
可将进程中的每个应用程序域都可以看做一个子进程。
一个进程可以包含一个应用程序域,也可以同时包含多个相互隔离的应用程序域。
使用应用程序域比直接使用多进程实现进程管理时速度更快、资源消耗更少、安全性更高。
另一方面,应用程序域为版本控制、安全性、可靠性和托管代码的卸载形成边界隔离。
执行应用程序时,所有的托管代码都加载到一个应用程序域中,由一个或多个托管线程执行。
应用程序域与线程之间不具有一一对应的相关性。
在任意时刻,一个应用程序域中可以通知执行多个线程。
同时,一个线程还可以自由跨越应用程序域的边界。
另外,应用程序域是相互隔离的,一个应用程序域无法直接访问另一个应用程序域的资源。
(3)线程是将一个进程划分为若干个独立的执行流,每个独立的执行流对应于一个线程。
对于单核处理器,线程是操作系统分配CPU时间片的基本执行单元;
对于多核处理器,线程是在每个内核上独立执行的代码块。
一个进程中既可以包含一个线程,也可以包含多个线程。
4、简述对称加密和不对称加密的特点、优点和缺点。
对称加密特点:
采用私钥机密算法,加密和解密数据使用同一个密钥;
私钥算法以块为单位加密数据,一次加密一个数据块,因此支持数据流。
优点:
保密强度高,加、解密速度快,适合加密大量数据。
缺点:
通信双方使用相同的密钥和IV加密和解密,发送方需要先将密钥和IV传递给接收方。
如果攻击者截获了密钥和IV,也就等于知道了如何解密数据。
不对称加密特点:
使用一个需要保密的私钥和一个可以对任何人公开的公钥。
用公钥加密的数据只能用私钥解密,反之,用私钥加密的数据只能用公钥解密;
私钥加密算法使用长度可变的缓冲区,因此无法使用流。
不对称加密的优点:
更不容易被攻击。
不对称加密的缺点:
由于无法使用流,因此不适合加密大量数据。
5、下面的代码使用Lambda表达式查询泛型列表List<
T>
,请写出与之等价的非Lambda代码形式:
List<
int>
numberList=newList<
{5,4,1,3,9,8,6,7,2,0};
varq1=numberList.Where(i=>
i<
4);
varq2=fromiinnumberList
wherei<
4
selecti;
6、简述几种常见的异步编程模型。
(1)传统的异步编程模型(APM)
这种模式也称之为IAsyncResult模式。
在这种设计模式中,异步操作要求通过以Begin和End为前缀的方法对实现异步。
调用以Begin为前缀的方法后,应用程序可以继续执行其后面的代码,同时异步方法在另外一个线程上执行。
当异步操作完成后,系统会自动调用以End为前缀的方法处理异步操作的结果。
(2)基于事件的异步编程模式(EAP)
在这种设计模式中,异步操作至少需要一个以Async为后缀和一个以Completed为后缀的事件配对共同表示。
当以Async为后缀的异步方法完成工作后,它会自动触发以Completed为后缀的事件。
(3)基于任务的异步模式(TAP)
这种模式基于任务(Task和Task(TResult))驱动来实现。
该模式只使用一个方法就可以表示异步操作的执行和完成,而且可以表示任意的异步操作任务。
(4)改进的基于任务的异步模式
使用async、await关键字以及Task.Run方法提升TAP的易用性和性能。
7、创建任务的方式有哪些?
(1)直接定义方法
无论是普通方法,还是使用async和Task联合签名的没有返回值的异步方法或者使用async和Task(TResult)联合签名的有返回值的异步方法,都可以将其作为任务来执行。
不论是普通方法还是异步方法,当方法内的语句较少时,都可以直接使用匿名方法通过Lambda表达式来实现。
(2)利用Task.Run隐式创建和执行异步任务
Task类的静态方法Run可以使用的默认的任务调度程序在线程池中通过后台执行指定的任务。
(3)利用async和await关键字隐式创建异步任务
用async和await关键字隐式调用Task或Task(TResult)类的构造函数创建异步任务,可以避免交互时的界面停顿的情况,但它们修饰的异步方法不会创建新的线程,它只表示在当前线程中异步执行指定的任务。
(4)利用WPF控件的调度器隐式创建和执行任务
每个WPF控件都有一个调度器(UI线程),可以通过调度器的InvokeAsync方法在当前UI线程中通过委托异步执行指定的任务。
(5)显式调用Task或Task(TResult)类的构造函数创建任务
当需要使用单独的线程执行任务时,可以显式调用Task或Task(TResult)类的构造函数创建任务对象,再调用其Start方法启动该对象。
8、简述TPL的分类及其与传统多线程相比具有的优势。
TPL的分类:
(1)数据并行:
是指对源集合或数组中的元素同时执行相同操作的情况。
主要通过Parallel类的静态方法For和ForEach方法来实现。
通过这两个方法可以并行处理Func和Action委托。
(2)任务并行:
是指同时运行一个或多个独立的任务,而且并行的任务都是异步执行的。
主要通过Parallel类的静态方法Invoke实现。
(3)并行查询:
是指并行实现LINQ查询。
优势:
(1)TPL编程模型使用CLR线程池执行多个任务,并能自动处理工作区、线程调度和取消、状态管理以及其他低级别的细节操作。
(2)TPL能动态按照比例调节并发度,从而高效利用所有可用的处理器。
(3)TPL比Thread更智能,当它通过试探法预判任务集不会从并行运行中获得性能优势时,还会自动选择按照顺序运行。
9、并行编程中有哪几种分区方式?
(1)范围分区:
按范围分区适合于长度确定的数据源。
此时多个线程将协同并行处理原始序列的不同片段。
(2)区块分区:
对于长度未知的链接列表或其他集合,可使用按区块分区。
在按区块分区中,并行循环或查询中的每个线程或任务都对一个区块中一定数量的源元素进行处理,然后返回检索其他元素。
分区程序确保分发所有元素,并且没有重复项。
(3)动态分区:
TPL分区程序还支持动态数量的分区,即可以随时创建分区。
它在本质上是负载均衡的。
(4)自定义分区程序:
根据对源集合中的不同位置处理元素所花费时间的了解,可以创建大小不同的范围分区。
前提是确立自定义分区程序比默认的分区程序更有效。
10、简述WCF的特点。
(1)以服务为中心:
WCF是面向服务的体系结构SOA的一种具体实现,只要符合基本协定,就可以实现平台无关。
(2)支持多种消息交换模式:
包括请求-应答模式、单向模式、双工模式以及自定义消息交换模式。
(3)支持多种传输协议和编码方式:
可以通过任意一种内置的网络传输协议和编码收发消息。
(4)支持工作流、事务以及持久性的消息处理:
工作流是指的将业务划分为一个个活动任务,再按照业务流程依次处理;
事务可以顺利完成也可以回滚;
持久性传输是指当通信中断后恢复时,继续发送未完成的消息。
(5)统一性、安全性和可扩展性:
统一性是指WCF整合了WebService、RPC、MSMQ等各种分布式编程技术,并以一种统一的协定为其他终结点提供服务;
安全性是指WCF对消息进行各种级别的加密处理;
可扩展性是指WCF允许开发人员自定义服务行为。
11、简述WCF的体系结构。
(1)协定层:
用于在相互传递消息之前制定服务规则、数据交换规则、消息格式、安全策略、绑定的网络协议以及消息采用的数据编码方式等。
(2)服务运行时层:
处理服务实际运行期间发生的行为。
包括限制消息处理的个数、服务出现内部错误时应采取的操作、控制是否提供元数据以及如何向外提供元数据、指定可运行的服务实例的数目以及事务处理和调度行为等。
(3)消息传递层:
描述数据的各种格式和交换模式。
(4)激活和承载层:
负责激活或者承载WCF服务。
12、简述WCF的几种消息交换模式。
(1)请求应答模式(Action/Reply)
默认情况下,客户端向WCF服务端发送服务请求,服务端执行服务操作,并将操作结果返回给客户端。
客户端如果不是通过异步操作来调用服务的,在服务端返回操作结果之前,客户端代码将处于阻塞状态。
这种模式称为请求应答模式。
在这种模式下,当客户端调用服务操作时,即使方法的返回类型为void,操作正常完成后,服务端也会返回一个空消息。
另外,如果服务端执行操作时遇到错误,也会将错误作为消息返回给客户端。
(2)单向模式(IsOneWay)
单向模式是指客户端调用WCF服务操作时,服务端不向客户端返回操作结果。
即使出现执行错误,也不会向客户端返回结果。
要开启该模式,需要将操作协定声明的IsOneWay属性设置为true。
单向模式的优点是运行速度快,缺点是当服务端执行过程中出现错误时,客户端接收不到任何返回消息,无法发现服务端是否正确执行了操作方法。
(3)双工模式(Duplex)
双工是指客户端和服务端都能主动地呼叫对方。
在这种模式中,WCF利用双向绑定实现服务端和客户端相互公开终结点的信息。
当服务端必须向客户端发送信息或者服务端主动印发客户端上的某个事件时,都可以使用双工通信模式来实现。
当客户端主动与服务端通信时,只需要通过客户端服务代理类直接调用服务端的服务操作即可。
13、简述TCP的特点。
(1)一对一通信:
利用TCP编写程序时,必须先建立TCP连接,然后连接双方都能向对方发送和接收数据。
每个TCP连接只能有两个端点进行一对一的通信,不能一对多直接通信。
(2)安全有序传输:
通过TCP连接传送的数据,能保证数据无差错、不丢失、不重复地到达接收方。
如果到达接收端的TCP报文段出现乱序,则会进行重排保证数据与发出的顺序相同。
(3)通过字节流收发数据:
客户端与服务端建立连接后,发送方将要发送的数据转换为字节流发送到内存的发送缓冲区中,TCP会自动从发送缓冲区中取出一定数量的数据,将其组合成TCP报文段逐个发送到IP层,然后再通过网卡发送出去;
接收端从IP层接收到TCP报文段后,将其暂存在内存的接收缓冲区中,应用程序依次读取接收缓冲区中的数据。
(4)传输的数据无边界:
由于TCP是将数据组装为多个数据报以字节流的形式进行传输,因此可能出现发送方单次发送的消息与接收方单次接收的消息不一致的现象。
或者说,不能保证单个Send方法发送的数据与单个Receive方法读取的数据一致。
即无消息边界现象。
三、程序设计
1、在下面代码片段中,方法EnCryptText利用TripleDES算法对字符串的加密。
请选择最确切的答案的序号填写到空格中,将功能代码补充完整。
A.cryptoStreamB.memoryStreamC.ToArray()
D.ToCharArray()E.Abort()F.Close()
G.CreateEncryptor(Key,IV)H.CreateDecryptor(Key,IV)
I.WriteJ.Read
//toEncrypt待加密字节数组
//Key算法使用密钥
//IV算法使用向量
privatebyte[]EncryptText(BYTE[]toEncrypt,byte[]Key,byte[]IV)
{
//创建一个内存流
MemoryStreammemoryStream=newMemoryStream();
//使用内存流、私钥和IV创建加密流,补充参数。
CryptoStreamcryptoStream=newCryptoStream(
①______________________________________,
newTripleDESCryptoServiceProvider().
________________,
CryptoStreamMode.
________);
try
cryptoStream.Write(toEncrypt,0,toEncrypt.Length)
cryptoStream.FlushFinalBlock();
byte[]encryptedBytes=memoryStream.
____________;
returnencryptedBytes;
}
catch(CryptographicExceptionerr)
thrownewException("
加密出错:
"
+err.Message);
finally
//关闭加密流
cryptoStream.
__________________________;
memoryStream.Close();
答:
①B
G
I
C
F
2、程序设计:
下面的两个函数分别采用顺序执行和并行执行的方式计算两个一维数组的和。
请将程序补充完整。
//顺序执行计算两个数组的和
voidSerialAdd()
{
intn=20;
int[]a=Enumerable.Range(1,n).ToArray();
int[]b=Enumerable.Range(1,n).ToArray();
int[]c=newint[n];
for(inti=0;
n;
i++)
c[i]=a[i]+b[i];
}
}
//并行执行计算两个数组的和
voidParallelAdd()
Action<
action=(i)=>
c[i]=a[i]+b[i];
};
Parallel.For(0,n,action);
3、现有一个Windows应用程序,利用TCP实现服务端功能,下面列出了相应的事件及部分代码。
请在下列选项中选择最确切的答案的序号,填写到相应的空格上,将事件功能补充完整。
A.Start()B.AcceptTcpClient()C.Begin()D.IPHostEntry
E.DnsF.AcceptSoket()G.sr.ReadLine()H.sr.ReadString()
I.client.GetStream()J.GetValue()K.Accept()L.newNetWorkStream()
(1)单击启动监听,则在本机第一个可用IP地址、端口3035上启动TCP监听,等待客户端的连接,每当接收到一个客户端连接请求后,启动一个线程负责接收并处理该客户端发送过来的信息。
privateTcpListenermyListener;
privatevoidbutton1_Click(objectsender,EventArgse)
Stringname=Dns.GetHostName();
//获取本机所有IPAddress
IPAddress[]allIP=①____.GetHostAddresses(name);
IPAddressip=allIP[0];
myListener=newTcpListener(ip,port)
//启动监听
myListener.
____________________________;
ThreadthreadListenClient=newThread(ListenClientConnet);
threadListenClient.Start();
(2)ListenClientConnet方法负责接收客户端的连接请求。
privatevoidListenClientConnect()
while(true)
TcpClientnewClient=null;
//等待用户进入
newClient=myListener.
________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 网络 编程 复习资料 汇编 学生
![提示](https://static.bdocx.com/images/bang_tan.gif)