开发异步方法时,需要在方法签名中使用异步关键字______async_____和Task
在基于任务的并行和异步编程模型中,会大量使用Lambda表达式、______Action_委托和Func委托
不论是private还是public,只要声明Datamember就可以序列化
解决TCP协议的无消息边界问题一般有几种方法?它们适合哪些场合? 【笔记|C#期末总结】答:1)发送固定长度的消息。适用于信息长度固定的场合。
2)将消息长度与消息一起发送。 此方法适用于任何场合。
3)使用特殊标记分隔消息。适用于消息本身不包含特殊标记的场合。6分(只答方法不答适用场合给4分)
在应用程序中,可以利用数字签名实现数据身份验证和数据完整性验证。数据身份验证是为了验证数据是不是持有私钥的人发送的;数据完整性验证则用于验证数据在传输过程中是否被修改过。
4.什么是线程同步?如何实现线程同步? 答:线程同步:指多个线程之间存在先后执行顺序的关联关系(3 分)lock语句可以有效地实现同步,即将代码段(语句块)标记为临界区。它能确保当一个线程位于代码的临界区(可以理解为一段代码)时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码段,则它将一直等待(即被阻塞),直到锁定的对象被释放以后才能进入临界区。(3分)
(1)用volatile修饰符锁定公共或私有字段。
? private static volatile bool isStop = false;
? public static bool IsStop
? {
? get { return isStop;
}
? set { isStop = value;
}
? }
? 利用volatile修饰符可直接访问内存中的字段,而不是将字段缓存在某个处理器的寄存器中。这样做的好处是所有处理器都可以访问该字段最新的值。
? (2)用Interlocked类提供的静态方法锁定局部变量。
? System.Threading.Interlocked类通过加锁和解锁提供了原子级别的静态操作方法,对并行执行过程中的某个局部变量进行操作时,可采用这种办法实现同步。
? int num = 0;
? Interlocked.Increment(ref num);
// 将 num 的值加 1
? Interlocked.Decrement(ref num);
// 将 num 的值减 1
? (3)用lock语句锁定代码块
? C#提供了一个lock语句,该语句能确保当一个线程完成执行代码块之前,不会被其他线程中断。被锁定的代码块称为临界区。
? lock语句的实现原理是进入临界区之前先锁定某个私有对象(声明为private的对象),然后再执行临界区中的代码,当代码块中的语句执行完毕后,再自动解除该锁。
复杂的网络应用程序中,需要掌握几个最基本的类: 1、提供网际协议IP地址的IPAddress类, 提供了对IP地址的转换和处理功能。
2、包含IP地址和端口号的IPEndPoint类;IPEndPoint是与IPAddress概念相关的一个类,它包含应用程序连接到主机上的服务所需的主机和端口信息。它由两部分组成,一个是主机IP地址,另一个是端口号。
3、为Internet或Intranet主机提供信息容器的IPHostEntry类。IPHostEntry类将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类一般和Dns类一起使用。
DNS(Domain Name System,域名系统)是因特网的一项核心服务,它可以将域名和IP地址相互转换。
//定义远程计算机端点信息
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
FTP的文件传输方式有两种: 1、ASCII模式。ASCII模式一般用来传输文本文件;
2、binary(二进制)模式。除了文本文件外的其他文件用binary(二进制)模式。
InvokeRequired :C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它。
第四章提到常见的数据流 文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)、加密流(CryptoStream)
StreamReader和StreamWriter类(操作文本数据时,一般用StreamReader和StreamWriter类来实现。)
BinaryReader和BinaryWriter类(System.IO命名空间还提供了BinaryReader和BinaryWriter类以二进制模式读写流,更方便于对图像文件、压缩文件等二进制数据进行操作。)
TCP 是Transmission Control Protocol(传输控制协议)的简称,是TCP/IP体系中面向连接的运输层协议,在网络中提供双工和可靠的服务。
特点:
一对一通信。
安全顺序传输。
通过字节流收发数据。
传输的数据无消息边界
TCP是将数据组装为多个数据报以字节流的形式进行传输,因此可能会出现发送方单次发送的消息与接收方单次接收的消息不一致的现象。
本地广播发送的地址不可以穿越子网。
同步执行和异步执行 ? 一种是执行某语句时,在该语句完成之前不会执行其后面的代码,这种执行方式称为同步执行。
? 一种是执行某语句时,不管该语句是否完成,都会继续执行其后面的语句,这种执行方式称为异步执行。
6.将字节序列转化为字符串称为_解码_ 将字符串转化为字节序列的过程为编码_。
Ttl属性: 课本P243,使用多播时,应注意的是该对象TTL值的设置以改变允许路由器转发的最大数目。利用UdpClient对象的Ttl属性可修改TTL的默认值,例如:
UdpClient udpClient = new UdpClient( );
udpClient.Ttl = 50;
用TcpListener和TcpClient编写TCP应用程序的一般步骤
请回答使用同步TCP编写客户端程序的一般步骤。(6分) 使用同步TCP编写客户端程序的一般步骤如下:
1)创建一个包含传输过程中所采用的网络类型、数据传输类型和协议类型的Socket对象或者TCPClient对象。
2)使用Connect方法将套接字与远程服务器地址相连。
3)与服务器进行数据传输。
4)完成工作后,向服务器发送关闭消息,并关闭与服务器的连接。
文章图片
编写TCP服务端代码的一般步骤
1)创建一个TcpListener对象,然后调用该对象的Start方法在指定的端口进行监听。
2)在单独的线程中,循环调用TcpListener对象的AcceptTcpClient方法接收客户端连接请求,并根据该方法返回的结果得到与该客户端对应的TcpClient对象。
3)每得到一个新的TcpClient对象,就创建一个与该客户端对应的线程,然后通过该线程与对应的客户端通信。
4)根据传送信息的情况确定是否关闭与客户端的连接。
3.用TcpListener和TcpClient编写TCP应用程序的一般步骤
(2)编写TCP客户端代码的一般步骤
1)利用TcpClient的构造函数创建一个TcpClient对象,并利用该对象与服务端建立连接。
2)利用TcpClient对象的GetStream方法得到网络流,然后利用该网络流与服务端进行数据传输。
3)创建一个线程监听指定的端口,循环接收并处理服务端发送过来的信息。
4)完成通信工作后,向服务端发送关闭信息,并关闭与服务器的连接。
POP3协议用于接收或下载邮件,默认端口110
SMTP协议用于传输或发送邮件,默认端口25
ftp文件传输协议使得主机间可以共享文件,默认使用TCP的21端口标识
P2P Peer-to-peer 是一类允许一组用户互相连接并直接从用户硬盘上获取文件的网络。
对于SMTP协议C#进行了很多封装,使我们使用起来相当方便
SMTP是英文Simple Mail Transfer Protocol的缩写,意为简单邮件传输协议,默认端口为25
在SMTP协议中,电子邮件由三部分组成,信封、首部和正文。
在网络上,识别远程主机的信息主要由两部分组成:
一是主机标识,用于识别与本地计算机通信的是哪台远程主机;
二是端口号,用于识别和远程主机的哪个进程通信。
3.什么是广播、组播?两者有什么区别? (6分) 答: 广播消息地址分为两种类型:本地广播和全球广播。本地广播可以向子网中的所有设备发送广播消息,其他网络不会受到本地广播的影响。全球广播使即点分十进制的255.255.255.255,这个特定的广播地址表明数据包的目的地是网络上的所有设备。但是由于路由器会自动过滤掉全球广播,所以使用这个地址没有实际意义。使用广播只能向其所在的子网内发送消息,而且是向子网中的所有设备发送消息,没有目的性,不但造成了网络负载,而且资源消耗较高。组播是将消息从一台设备发送到本网或全网内选择的设备子集上,即发送到那些加入指定组播组的设备上。
2.简述HTTP的特点(6分) 答: HTTP以TCP方式工作。
HTTP是无状态的。
HTTP使用元信息作为标头。
一个线程要么是后台线程要么是前台线程。
A、后台线程与前台线程类似,区别是后台线程不会影响进程终止。属于某个进程的所有前台线程都终止后,公共语言运行库就会结束该进程,而且所有属于该进程的后台线程也都会立即停止,而不管后台工作是否完成。
B、通过创建并启动新的Thread对象而生成的线程都是前台线程。
? C、利用Thread对象的IsBackground属性,可以设置或判断一个线程是后台线程还是前台线程。通过将某个线程的IsBackground属性设置为true,使其变为后台线程。
? D、默认情况下,属于托管线程池的线程(即其IsThreadPoolThread属性为true的线程)都是后台线程。
组播协议的优势在于当需要将大量相同的数据传输到不通主机时,
1.能节省发送数据的主机的系统资源和带宽;
2.组播是有选择地复制给又要求的主机;
3.组播可以穿越公网广泛传播,而广播则只能在局域网或专门的广播网内部传播;
4.组播能节省网络主干的带宽;
第八章 HTTP的特点: A、HTTP以TCP方式工作。
HTTP客户端首先与服务器建立TCP连接,然后客户端通过套接字发送HTTP请求,并通过套接字接收HTTP响应。
B、HTTP是无状态的
“无状态”的含义是,客户端发送一次请求后,服务器并没有存储关于该客户端的任何状态信息。即使客户端再次请求同一个对象,服务器仍会重新发送这个对象,而不管原来是否已经向该客户端发送过这个对象。
C.HTTP使用元信息作为标头
HTTP通过添加标头(Header)的方式向服务器提供本次HTTP请求的相关信息,即在主要数据前添加一部分信息,称为元信息(Metainformation)。
例如,传送的对象属于哪种类型,采用的是哪种编码等。
D、HTTP版本有0.9、1.0、1.1,HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
(3)基于任务的异步模式(TAP)
? .NET 4.0框架,异步编程建议的异步编程技术。
(4)改进的基于任务的异步模式(async、await、Task.Run和TAP)
( UdpClient)类的Connect方法向远程主机发起连接请求。
第十章:同步发送和接收数据
在同步阻塞方式下,可以用UdpClient对象的Send方法向远程主机发送数据,用Receive方法接收来自远程主机的数据。
(1)为什么使用多线程?多线程适用于什么场合? (2)如何判断一个线程运行终止?说明思路。 答:
(1)多线程可以提高程序的并发性。(2分)在Client/Server模式下,服务器需要不断监听来自多个客户端的请求,这时,如果采用单线程机制的话,这个线程由于要不断的循环监听客户端请求,从而无暇处理其他的任务。实际上,当执行需要较长时间才能完成的连续操作时,或者等待网络或其他IO设备响应时,都可以使用多线程技术。(2分)
(2)设置bool类型字段,在线程开始前字段值为false,线程结束时设置字段为true.主线程不断检查是字段值,当值为ture时意味着线程终止。(2分) .
5.数字签名有什么意义?简要回答如何实现数字签名。 答: 意义:为了验证接收者接收的文件是否和原始文件完全相同。如何实现:数字签名是利用私钥加密必须用公钥解密这个原理来实现的。实现思路是,发送方先将发送的消息使用哈希函数创建消息摘要,然后用私钥对消息摘要进行加密,以创建发送方的个人签名。接收方收到消息和签名后,使用发送方的公钥解密该签名,以恢复消息摘要,并使用发送方所用的同一哈希算法对该消息进行哈希运算。如果接收方计算的消息摘要与收到的消息摘要完全匹配,则接收方可以确保消息在传输过程中没有修改。注意,因为公钥不是保密的,所以任何人都可以验证签名。
TCP/IP协议 并不完全符合OSI的七层参考模型,采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:
应用层: 应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层: 在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
网络层(网际层):负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
推荐阅读
- 笔记|解决ModularNotFoundError: No module named “cv2.aruco“
- 笔记|grub引导项修复(解决服务器Ubuntu开机进入grub界面)
- 笔记|ubuntu22.04添加APPImage到dock收藏
- tensorflow和pytorch框架的安装以及cuda踩坑记录
- 笔记|解决pip3 install numpy时ReadTimeoutError
- 游戏开发|unity游戏开发(1)安装开发环境
- java|SSM教务管理系统
- C#/VB.NET:|C#/VB.NET: 将Word或Excel文档转化为Text
- springboot|springboot中实现短信验证(从零开始、腾讯云)