c#网络应用编程知识点

更新时间:2023-06-11 20:22:52 阅读: 评论:0

第一章
1.简述什么是C/S模式,什么是B/S模式,C/S和B/S的优缺点。
答:胖客户端应用程序编程架构,其主要工作都在客户端运行,这样可以充分利用本地计算机的性能优势。在分布式的基础上进一步抽象出来的编程模型,缺点是需要在本机安装客户端软件。C/S将一个网络事务处理分为两部分:
客户端(Client,也叫客户机)用于为用户提供操作,同时向网络提供请求服务的接口;服务端(Server)负责接收并处理客户端发出的服务请求,并将服务处理结果返回给客户端。B/S模式是在分布式系统基础上抽象出来的网络通信模型;B/S只使用HTTP进行通信。优点是单台计算机可以访问任何Web服务器,缺点是B/S模式有沙盒限制。
2.C/S客户端一般用WPF,服务端用WCF实现。企业内部网用https来访问
3.TCP/IP网络模型有四层:应用层,传输层,网际层,网络接口层
4.什么是套接字?套接字有哪几种类型?
答:套接字是支持TCP/IP网络通信的基本操作单元,是不同主机间的进程进行通信的端点。在一个套接
topfer字实例中,既保存了本机的IP地址和端口,也保存了对方的IP地址和端口,同时也保存了双方通信采用的网络协议等信息。
减少的英文套接字有3种类型:流式套接字(TCP)、数据报套接字(UDP)和原始套接字(IP)。5.IP地址转换与域名解析相关的类都在System.Net命名空间下。
IP:在因特网中,每台联网的主机都要有一个在全世界范围内唯一的标识,该标识称为IP地址。多播地址在:224.0.0.0~239.255.255.255之间。IP地址由网络号和主机号构成。
端口号:用于区别主机上的那个进程,而引入的新的地址空间,叫端口号。
6.提供网际协议IP地址的IPAddress类;
包含IP地址和端口号的IPEndPoint类;
为Internet或Intranet主机提供信息容器的IPHostEntry类。IPHostEntry类将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类一般和Dns类一起使用。
IPAddress[] ips =Dns.GetHostEntry(“”).AddressList;
DNS类的IPAddress[] GetHostAddress(string hostNameOrAddress);方法
若是主机名,则返回此主机的所有IP
若hostNameOrAddress是IP地址,则直接返回此地址;
若hostNameOrAddress是空字符串,则返回本地主机的所有IPv4和IPv6地址。
DNS类的GetHostEntry(String s):当参数为空字符串时,返回本地主机的IPHostEntry实例。
7.对网络流量和本机网络地址等信息的访问类都在System.Net.NetworkInformation命名空
间下。网卡信息由NetworkInterface和IPIterfaceProperties类得到(实例都只能用静态方法得到实例),网络流量用IPGlobalProprieties(静态方法获得实例).
第二章
海边的卡夫卡语录
1.数字墨迹有哪些用途?一般的WPF元素是否具有数字墨迹相关的事件?
答:利用数字墨迹可以在计算机、手机、平板电脑、车载导航仪等各种设备上绘制墨迹形状,还可以利用它实现与触屏和手写应用相关的功能。所有WPF元素都支持数字墨迹功能。
2. Ribbon控件主要包括以下子项:QuickAccessToolBar(快速访问工具栏),ApplicationMenu (应
用程序菜单),RibbonTab(选项卡)。
3. 触笔(Stylus)在画板上移动时显示的痕迹叫墨迹笔画(Stroke),简称笔画。
(System.Windows.Ink)。其GUID一般用Guid.NewGuid()方法获取
4. 静态呈现是指将墨迹添加到控件之后再显示墨迹。添加方式有:通过触笔添加、从剪贴板中粘贴、从文件中加载。静态呈现墨迹的办法是自定义从Stroke类继承的类,并且在自定义类中重写引发触笔事件的DrawCore方法。
动态呈现是指在移动触点的过程中同时呈现墨迹。是将自定义墨迹控件的DynamicRenderer属性设置为自定义的从DynamicRenderer类继承的类。并重写OnDraw方法。
5. 制作自定义墨迹画板的主要设计步骤如下。
1. 创建一个从InkCanvas派生的类。
2. 将自定义的DynamicRenderer分配给InkCanvas.DynamicRenderer属性。
3. 重写OnStrokeCollected方法。在此方法中,移除已添加到InkCanvas中的原始笔画,然后创建一个自定义笔画,将其添加到Stroke s属性中。
4.最后再使用包含该自定义笔画的新InkCanvasStrokeCollectedEventArgs调用基类相应的方
法。
在OnStylusMove事件中,每次自动收集到的墨迹点的集合中只有两个点:一个是上次收集的集合中的最后一个点,一个是当前点。
第三章
1.简要回答下列问题。
(1)进程和线程有什么区别?为什么要用多线程?多线程适用于哪种场合?
(2)前台线程和后台线程有什么区别和联系?如何判断一个线程属于前台线程还是后台线程?如何将一个线程设置为后台线程?
答:(1)进程是正在执行的程序,线程是某个进程中的一个或多个执行流。进程是线程的容器,至少有一个主线程,线程的提出是为了适应程序内部的并行。多线程可让多个任务同时执行。当执行需要较长时间才能完成的连续操作时,或者等待网络或其他I/O 设备相应时,都可以使用多线程技术。
(2)一个线程要么是前台线程要么是后台线程。两者的区别是:后台线程不会影响进程的终止,而前台线程则会影响进程的终止。只有当属于某个进程的所有前台线程都终止后,公共语言运行库才会结束该进程,而所有的后台线程也都会立刻停止。用Thread对象创建的线程默认都是前台线程,线程池中的以及托管线程都是后台线程。
3.System.Diagnostics命名空间下的Process类提供了在操作系统级别对进程进行管理的各种属性和方法。
4.启动进程:
Process p = new Process();      //首先需要创建Process类的一个实例
p.StartInfo.FileName = "";//通过StartInfo属性指定要运行的应用程序名称以及传递的参数
p.StartInfo.Arguments = argument;//要打开的文本文件
p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;//带图形界面的设置
p.Start();                              //启动进程
终止进程有两种方式:Kill和CloMainWindow,Kill方法用于强行终止进程,是终止没有图形化界面进程的唯一方法。Kill方法是异步执行的,调用WaitForExit方法等待进程退出,或检查HasExited 属性以确定进程是否退出。CloMainWindow()方法通过向主窗口发送关闭消息来关闭进程。此两种方法都只能对本机进程进行操作。
WaitForInputIdle方法仅适用于具有用户界面的进程,它可以使Process等待关联进程进入空闲状态。EnableRaisingEvents属性用于获取或设置在进程终止时是否应引发Exited事件。WaitForExit
方法可设置等待关联进程退出的时间,并在该段时间结束前或该进程退出前,阻止当前线程执行。5.获取进程信息
Process.GetProcess(string IP)获取指定主机的进程,为空时是本地主机的。
Process静态的GetProcessById(int ID)方法会自动创建Process对象,并将其与本地计算机上的进程相关联,同时将进程Id传递给该Process对象。
Process静态的GetProcessByName(string processName)方法返回一个包含所有关联进程的数组,得到该数组后,可以再依次查询这些进程中的每一个标识符,从而得到与该进程相关的更多信息。每次进程变动都需调用RefreshProcessInfo()方法。
6.System.Threading命名空间下的Thread用于管理线程。
7.主线程和辅助线程:当程序作为进程来运行时,系统都会为该进程创建一个默认的线程,该线程
称为主线程。或者说,主线程用于执行Main方法中的代码,当Main方法返回时,主线程也自动终止。在一个进程中,除了主线程之外的其他线程都称为辅助线程。
8.通过Thread对象可创建一个单独的线程,Thread thread1 = new Thread(<;方法名>);创建一个线
程thread1,并自动通过相应的委托执行用”<;方法名>”指定的方法。有两种委托:ThreadStart系统自定义的委托,可执行无返回值的无参函数。
ThreadStart a = new ThreadStart(test);//public void test();
Thread t = new Thread(a);
t.Start();
//等价于
Thread t = new Thread(test);t.Start();
还有一个系统自定义委托是ParameterizedThreadStart的委托,所执行的方法是无返回值的参数为Object的函数。
线程启动即Start方法,若线程执行的委托是无参的则为Start().若是有参数的则为Start(Object obj)。
终止或取消线程:
1.第1种方法是先设置一个修饰符为volatile的布尔型的字段表示是否需要正常结束该线程,
称为终止线程。
2.第2种方法是在其他线程中调用Thread实例的Abort方法终止当前线程,该方法的最终效articulate
果是强行终止该线程的执行,属于非正常终止的情况,称为取消线程的执行休眠线程:调用Thread.Sleep(参数)的线程自己阻塞。
9.什么是线程池?使用线程池有什么好处?
线程池适用于执行时间短,任务量大的场合。
线程池是在后台执行任务的线程集合,好处有:如当某个线程无法进入线程池执行时先将其放入等待
队列,自动决定用哪个处理器执行线程池中的某个线程,自动调节这些线程执行时的负载平衡问题等。另外,线程池总是在后台异步处理请求的任务,而不会占用主线程,也不会延迟主线程中后续请求的处理。
线程池的基本特征:
1.托管线程池中的线程都是后台线程。
2.添加到线程池中的任务不一定会立即执行。
3.线程池可自动重用已创建过的线程。一旦池中的某个线程完成任务,它将返回到等待线程队
列中,等待被再次使用,而不是直接销毁它。
4.开发人员可设置线程池的最大线程数。
5.从框架4.0开始,线程池中的线程都是利用多核处理技术来实现的。
10.向线程池中添加工作项:直接利用Thread.QueueUrWorkItem(new WaitCallback())来添加有参
数无返回值的函数。
11.什么是同步?什么是异步?
答:执行某语句时,在该语句完成之前不会执行其后面的代码,这种执行方式称为同步执行。另一种是执行某语句时,不管该语句是否完成,都会继续执行其后面的语句,这种执行方式叫异步执行。
12.为什么需要同步?C#提供了什么语句可以简单地实现代码同步?
答:当并行执行的多个线程同时访问某些资源时,必须考虑如何让多个线程保持同步。同步的目的是为了防止多个线程同时访问某些资源时出现死锁和争用情况。C#提供的lock语句可以简单地实现代码同步。
13.实现资源同步的方式:
多线程实现资源同步主要通过加锁或原子操作来实现。
1.用volatile修饰符锁定公共或私有字段,利用该修饰符可直接访问内存中的字段,
这样做的好处是所有处理器都可以访问该字段最新的值。
2.用Interlocked类提供的静态方法锁定局部变量,通过加锁和解锁提供了原子级别
的静态操作方法。
3.用lock语句锁定代码块(了解:lock语句的实现原理是进入临界区之前先锁定某
个私有对象(声明为private的对象),然后再执行临界区中的代码,当代码块中的语句执行完毕后,再自动解除该锁)。不允许锁定声明为Public 为了解决死锁以及异步执行过程中的同步问题,WPF中的每个元素(包括根元素)都有一个Dispatcher属性。textBlock1.Dispatcher.Invoke(()=>{
当然的英文翻译=”1”;
}
);
14.什么叫应用程序域?应用程序域和进程有什么区别和联系?和线程呢?
答:一个主进程中,可包含一个或多个“子进程”,每个“子进程”所占用的内存范围(或者叫边界)都称为一个应用程序域;
一个进程既可以只包含一个应用程序域,也可以同时包含多个相互隔离的应用程序域。
多进程是在操作系统级别使用的功能,资源消耗较大,细节控制复杂;应用程序域是在应用程序级别使用的功能,比直接用多进程来实现进程管理速度快、资源消耗少而且更安全,是轻量级的进程管理。
庐江英语
应用程序域和线程的关系:
1.应用程序域为安全性、版本控制、可靠性和托管代码的卸载形成隔离边界,执
行应用程序时,所有托管代码均加载到一个应用程序域中,由一个或多个托管
线程来运行。
2.应用程序域和线程之间不具有一对一的相关性。
3.应用程序域之间是相互隔离的,一个应用程序域无法直接访问另一个应用程序
域的资源。
15.什么时候使用应用程序域?
答:1. 当需要动态扩展程序的功能时,可将其他进程(.dll文件或者.exe文件)中的全部或部分功能“
嵌入”到当前应用程序进程界面中,使其看起来就像是同一个应用程序一样(多进程则无法做到这一点),而且这种实现方式比用多进程实现的运行速度快。
2.在同一个进程内,实现不同域之间的通信比用多进程实现简单。
3.在安全性方面,用应用程序域来实现比用多进程来实现更有保障
第四章
●1.(记)C#中的字符和字符串默认采用的都是Unicode编码。Encoding类位于
System.Text命名空间下。(了解)使用Encoding类静态的GetEncodings方法可得到一个包含所有编码的EncodingInfo类型的数组。也可以利用Encoding类静态的GetEndcoing方法来获取指定的编码,得到Encoding对象后,即可利用HeaderName 属性获取编码名称,利用EncodingName属性获取编码描述。
●  2. public static byte[] Convert(
Encoding srcEncoding, //源编码
Encoding dstEncoding, //目标编码
byte[] bytes //待转换的字节数组
)
3.将字符序列转换为字节序列的过程叫编码,GetBytes()。将字节序列转换为字符序列
的过程叫解码,GetString()。
高级财务会计
4.对数据流的操作有3种:
逐字节顺序写入(将数据从内存缓冲区传输到外部源);
逐字节顺序读取(将数据从外部源传输到内存缓冲区);
随机读写(从某个位置开始逐字节顺序读或写);
5.FileStream(string path,FileMode mode,FileAccess access);FileMode.Append只能同
FileAccess.Write使用;另外一种构造方法是File.OpenRead(String path);创建仅读取的文件流.
6.(MemoryStream)内存流:该对象的CanSeek属性值默认为true
engineer
程序中可通过Position属性获取内存流的当前位置。
内存流的容量可自动增长。
7.NetworkStream仅支持面向连接的套接字。注意以下几点:
a.通过DataAvailable属性,可查看缓冲区中是否有数据等待读出.brush的复数形式
b.网络流没有当前位置的概念,不支持对数据流的查找和随机访问,
NetworkStream对象的CanSeek属性始终返回fal.
c.读取Position属性和调用Seek方法时,都会引发NotSupportedException异常.
8.前三种流都在System.IO下,加密流(CrytoStream)在System.Security.Cryptography
下;public CryptoStream(
Stream stream, //对其执行加密转换的流
ICryptoTransform transform, //要对流执行的加密转换bbc在线收听
CryptoStreamMode mode //CryptoStreamMode枚举,有Read和Write两种);
9.StreamReader和StreamWriter
NetworkStream、MemoryStream和FileStream实现思路都是先将待写入的数据转化为字节序列,然后再进行读写,对于文本数据来说操作不方便。所以用StreamReader 和StreamWriter来简化。StremReader sr = new StremReader (前三种流对象)。别忘记Clo或用using。
10.为什么要对字符进行编码和解码?
答:在网络通信中,很多情况下通信双方传达的都是字符信息。但是,字符信息并不能直接从网络的一端传递到另一端,这些字符信息首先需要被转换成一个字节序

本文发布于:2023-06-11 20:22:52,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/141700.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   进程   执行   方法   墨迹   应用程序   实现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图