C网络应用编程知识点

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一章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网络通信的基本操作单元,是不同主机间的进程进行通信的端点。在一个套接字实例中,既保存了本机的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(“news.sohu.com”).AddressList;DNS类的IPAddress[]GetHostAddresses(stringhostNameOrAddress);方法若是主机名,则返回此主机的所有IP若hostNameOrAddress是IP地址,则直接返回此地址;若hostNameOrAddress是空字符串,则返回本地主机的所有IPv4和IPv6地址。DNS类的GetHostEntry(Strings):当参数为空字符串时,返回本地主机的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中的原始笔画,然后创建一个自定义笔画,将其添加到Strokes属性中。4.最后再使用包含该自定义笔画的新InkCanvasStrokeCollectedEventArgs调用基类相应的方法。在OnStylusMove事件中,每次自动收集到的墨迹点的集合中只有两个点:一个是上次收集的集合中的最后一个点,一个是当前点。第三章1.简要回答下列问题。(1)进程和线程有什么区别?为什么要用多线程?多线程适用于哪种场合?(2)前台线程和后台线程有什么区别和联系?如何判断一个线程属于前台线程还是后台线程?如何将一个线程设置为后台线程?答:(1)进程是正在执行的程序,线程是某个进程中的一个或多个执行流。进程是线程的容器,至少有一个主线程,线程的提出是为了适应程序内部的并行。多线程可让多个任务同时执行。当执行需要较长时间才能完成的连续操作时,或者等待网络或其他I/O设备相应时,都可以使用多线程技术。(2)一个线程要么是前台线程要么是后台线程。两者的区别是:后台线程不会影响进程的终止,而前台线程则会影响进程的终止。只有当属于某个进程的所有前台线程都终止后,公共语言运行库才会结束该进程,而所有的后台线程也都会立刻停止。用Thread对象创建的线程默认都是前台线程,线程池中的以及托管线程都是后台线程。3.System.Diagnostics命名空间下的Process类提供了在操作系统级别对进程进行管理的各种属性和方法。4.启动进程:Processp=newProcess();//首先需要创建Process类的一个实例p.StartInfo.FileName=Notepad.exe;//通过StartInfo属性指定要运行的应用程序名称以及传递的参数p.StartInfo.Arguments=argument;//要打开的文本文件p.StartInfo.WindowStyle=ProcessWindowStyle.Normal;//带图形界面的设置p.Start();//启动进程终止进程有两种方式:Kill和CloseMainWindow,Kill方法用于强行终止进程,是终止没有图形化界面进程的唯一方法。Kill方法是异步执行的,调用WaitForExit方法等待进程退出,或检查HasExited属性以确定进程是否退出。CloseMainWindow()方法通过向主窗口发送关闭消息来关闭进程。此两种方法都只能对本机进程进行操作。WaitForInputIdle方法仅适用于具有用户界面的进程,它可以使Process等待关联进程进入空闲状态。EnableRaisingEvents属性用于获取或设置在进程终止时是否应引发Exited事件。WaitForExit方法可设置等待关联进程退出的时间,并在该段时间结束前或该进程退出前,阻止当前线程执行。5.获取进程信息Process.GetProcesses(stringIP)获取指定主机的进程,为空时是本地主机的。Process静态的GetProcessById(intID)方法会自动创建Process对象,并将其与本地计算机上的进程相关联,同时将进程Id传递给该Process对象。Process静态的GetProcessesByName(stringprocessName)方法返回一个包含所有关联进程的数组,得到该数组后,可以再依次查询这些进程中的每一个标识符,从而得到与该进程相关的更多信息。每次进程变动都需调用RefreshProcessInfo()方法。6.System.Threading命名空间下的Thread用于管理线程。7.主线程和辅助线程:当程序作为进程来运行时,系统都会为该进程创建一个默认的线程,该线程称为主线程。或者说,主线程用于执行Main方法中的代码,当Main方法返回时,主线程也自动终止。在一个进程中,除了主线程之外的其他线程都称为辅助线程。8.通过Thread对象可创建一个单独的线程,Threadthread1=newThread(方法名);创建一个线程thread1,并自动通过相应的委托执行用”方法名”指定的方法。有两种委托:ThreadStart系统自定义的委托,可执行无返回值的无参函数。ThreadStarta=newThreadStart(test);//publicvoidtest();Threadt=newThread(a);t.Start();//等价于Threadt=newThread(test);t.Start();还有一个系统自定义委托是ParameterizedThreadStart的委托,所执行的方法是无返回值的参数为Object的函数。线程启动即Start方法,若线程执行的委托是无参的则为Start().若是有参数的则为Start(Objectobj)。终止或取消线程:1.第1种方法是先设置一个修饰符为volatile的布尔型的字段表示是否需要正常结束该线程,称为终止线程。2.第2种方法是在其他线程中调用Thread实例的Abort方法终止当前线程,该方法的最终效果是强行终止该线程的执行,属于非正常终止的情况,称为取消线程的执行休眠线程:调用Thread.Sleep(参数)的线程自己阻塞。9.什么是线程池?使用线程池有什么好处?线程池适用于执行时间短,任务量大的场合。线程池是在后台执行任务的线程集合,好处有:如当某个线程无法进入线程池执行时先将其放入等待队列,自动决定用哪个处理器执行线程池中的某个线程,自动调节这些线程执行时的负载平衡问题等。另外,线程池总是在后台异步处理请求的任务,而不会占用主线程,也不会延迟主线程中后续请求的处理。线程池的基本特征:1.托管线程池中的线程都是后台线程。2.添加到线程池中的任务不一定会立即执行。3.线程池可自动重用已创建过的线程。一旦池中的某个线程完成任务,它将返回到等待线程队列中,等待被再次使用,而不是直接销毁它。4.开发人员可设置线程池的最大线程数。5.从.NET框架4.0开始,线程池中的线程都是利用多核处理技术来实现的。10.向线程池中添加工作项:直接利用Thread.QueueUserWorkItem(newWaitCallback())来添加有参数无返回值的函数。11.什么是同步?什么是异步?答:执行某语句时,在该语句完成之前不会执行其后面的代码,这种执行方式称为同步执行。另一种是执行某语句时,不管该语句是否完成,都会继续执行其后面的语句,这种执行方式叫异步执行。12.为什么需要同步?C#提供了什么语句可以简单地实现代码同步?答:当并行执行的多个线程同时访问某些资源时,必须考虑如何让多个线程保持同步。同步的目的是为了防止多个线程同时访问某些资源时出现死锁和争用情况。C#提供的lock语句可以简单地实现代码同步。13.实现资源同步的方式:多线程实现资源同步主要通过加锁或原子操作来实现。1.用volatile修饰符锁定公共或私有字段,利用该修饰符可直接访问内存中的字段,这样做的好处是所有处理器都可以访问该字段最新的值。2.用Interlocked类提供的静态方法锁定局部变量,通过加锁和解锁提供了原子级别的静态操作方法。3.用lock语句锁定代码块(了解:lock语句的实现原理是进入临界区之前先锁定某个私有对象(声明为private的对象),然后再执行临界区中的代码,当代码块中的语句执行完毕后,再自动解除该锁)。不允许锁定声明为Public为了解决死锁以及异步执行

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功