asp net第十天as p_net王承伟_第1页
asp net第十天as p_net王承伟_第2页
asp net第十天as p_net王承伟_第3页
asp net第十天as p_net王承伟_第4页
asp net第十天as p_net王承伟_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高级软件人才实作培训专家聊天程序(基于Socket,Thread)讲师:王承伟北京传智播客教育北京传智播客教育 讲师:王承伟前提:高级软件人才实作培训专家 理解委托 理解简单的IO高级软件人才实作培训专家简单回顾委托 什么是委托?(安全的函数指针)通俗:就是一个能存放符合某种格式(方法签名)的方法的指针的 委托创建方式准备一个方法:string HelloU(string uName)/方法代码声明 委 托:delegate 返回值类型 委托类型名(参数) 例子:delegate string DGSayHi(string uName);创建

2、委托对象:DGSayHi dgSay=new DGSayHi(HelloU);或者:DGSayHi dgSay=HelloU;/new DGSayHi(HelloU);追加方法:dgSay+=HelloU2;/Delegate.Combine(,) 删除方法:dgSay-=HelloU3; 委托调用方式dgSay(binggo); /dgSay.Invoke(binggo);画图高级软件人才实作培训专家委托作为参数 声明使用委托做参数的方法:void IntenationalSayHi(string uName,DGSayHi dgSh)/业务代码dgSh(uName);/业务代码 调用执行:

3、传委托对象:InternationalSayHi(biggo,dgSay);直 接 传 有 和 委 托 相 同 方 法 签 名 的 方 法 : InternationalSayHi(biggo,HelloU); InternationalSayHi(biggo,new DGSayHi(HelloU); 委托原理*高级软件人才实作培训专家文件流高级软件人才实作培训专家FileStream 文件流 FileStream对象表示在磁盘或网络路径上指向文件的流 使用 FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作 FileStream 对输入输出进行缓冲,从而提高性能 为什么

4、不用File.ReadAllText()? 好处之一就是:对于大文件来说,FileStream可以对文件采取分段读取,即每次只读取一部分到内存。高级软件人才实作培训专家字符串和字节数组转换 字节数组转换成字符串: StringSystem.Text.Encoding.UTF8.GetString(byte) 字 符 串 转 换 成 字 节 数 组 :byte System.Text.Encoding.UTF8.GetBytes(String)高级软件人才实作培训专家北京传智播客教育 讲师:王承伟高级软件人才实作培训专家多线程北京传智播客教育

5、讲师:王承伟高级软件人才实作培训专家为什么要用多线程 让计算机同时做多件事情,节约时间。运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况。 多线程可以让一个程序“同时”处理多个事情。 计算机cpu大部分时间处于空闲状态,浪费了cpu资源。Demo1:单线程带来的问题高级软件人才实作培训专家进程与线程线程 3线程 1程序 2线程 2程序 1线程 2线程 1线程 3 一个进程至少有一个线程 同一个进程中的多个线程之间可以并发执行高级软件人才实作培训专家.net中如何实现多线程1 线程肯定也是要执行一段代码的。所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所

6、要执行的代码。(找个人来做一件事情) 线程启动时,通过委托调用该方法。(委托的好处)(线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法)高级软件人才实作培训专家.net中如何实现多线程2 产生一个线程的4步骤:编写产生线程所要执行的方法引用System.Threading命名空间实例化Thread类,并传入一个指向线程所要运行方法的委托。(这时候这个线程已经产生,但是还没有运行)调用Thread实例的Start方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定。Demo2:两个线程同时运行(画图)高级软件人才实作培训专家前台线程和线程 前台线程:只有所有的前台

7、线程都关闭才能完成程序关闭。线程:只要所有的前台线程结束, 线程自动结束。高级软件人才实作培训专家Thread类的一些重要成员(*) Start()启动线程 Abort()终止线程 Thread.Sleep(1) 静态方法,可以使当前线程停止一段时间运行 Name线程名 Thread.CurrentThread获得当前的线程引用高级软件人才实作培训专家数据的插入 Demo3:线程中如何访问控件 Demo4:执行带参数的方法高级软件人才实作培训专家线程的调度方式*1. 非抢占式调度:指某个线程在运行时不会 作系统强制暂停,它可以持续地运行直至运行告一段落井主动地交出运行权。在这样的调度模式之下,

8、线程的运行就完全是单队列的,并且可能产生恶意程序长期霸占运行权的情况。而且一旦一个程序死了,那么整个电脑就只好重启啦!2. 抢占式调度:指每个线程都只有极少的运行时间(在Windows内核模式下这个时间不会超过20ms ),而当时间用完时该线程就会被强制暂停,保存上下文并把CPU运行权利交给下一个线程,这样调度的结果就是所有的线程都在被快速地切换运行,使得使用者感觉所有的线程在并行运行。高级软件人才实作培训专家SOCKET网络编程高级软件人才实作培训专家Socket相关概念 socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,

9、是一个通信链的句柄。(其实就是两个程序通信用的。) socket非常类似于电话插座。以一个电话网为例。电话的通话双方相当于相互通信的2个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。高级软件人才实作

10、培训专家Socket相关概念 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)。 例如:http 使用80端口 ftp使用21端口 smtp 25端口 有两种类型:流式Socket(STREAM):是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低;数据报式Socket(DATAGRAM):是一种无连接的Socket,对应于无连接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.高级软件人才实作培训专家S

11、ocket一般应用模式(服务器端和客户端)1.负责连接请求的套接字2.3.负责和客户端通信的套接字客户端套接字1. 服务端welcoming socket 开始端口(负责客户端连接信息)2. 客户端client socket连接服务端指定端口(负责接收和发送服务端消息) 3.服务端welcoming socket 到客户端连接,创建connection socket。(负责和客户端通信)高级软件人才实作培训专家Socket一般应用模式(服务器端和客户端) 服务器端的Socket(至少需要两个)一个负责接收客户端连接请求(但不负责与客户端通信)每成功接收到一个客户端的连接便在服务端产生一个对应的

12、负责通信的Socket在接收到客户端连接时创建.为每个连接成功的客户端请求在服务端都创建一个对应的Socket(负责和客户端通信). 客户端的Socket客户端Socket必须指定要连接的服务端地址和端口。通过创建一个Socket对象来初始化一个到服务器端的TCP连接。高级软件人才实作培训专家Socket的通讯过程 服务器端:申请一个socket绑定到一个IP地址和一个端口上开启侦听,等待接授连接 客户端:申请一个socket连接服务器(指明IP地址和端) 服务器端接到连接请求后,产生一个新的socket(端口大于1024小于65535)与客户端建立连接并进行通讯,原socket继续 。高级软

13、件人才实作培训专家Socket的构造函数 连接通过构造函数完成。 public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)AddressFamily 成员指定 Socket 用来解析地址的寻址方案。例如,InterNetwork 指示当 Socket 使用一个 IP 版本 4 地址连接。SocketType 定义要打开的 Socket 的类型Socket 类使用 ProtocolType 枚举向 Windows Sockets API所请求的协议 如:mySocket

14、 = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);Demo1: 注意:高级软件人才实作培训专家 至少要定义一个要连接的远程主机的IP和端 。 端 必须在 1 和 65535之间,最好在1024以后。 要连接的远程主机必须正在 指定端口,也就是说你无法随意连接远程主机。如:IPAddress addr = IPAddress.Parse();IPEndPoint endp = new IPEndPoint(addr, 10001);服务端先绑定:serverWelcomeS

15、ocket.Bind(endp) 客户端再连接:clientSocket.Connect(endp)注意:高级软件人才实作培训专家 一个Socket一次只能连接一台主机。 Socket关闭后无法再次使用。 每个Socket对象只能一台远程主机连接. 如果你想连接到多台远程主机, 你必须创建多个Socket对象。高级软件人才实作培训专家Socket方法 相关类 IPAddress类:包含了一个IP地址 IPEndPoint类:包含了一对IP地址和端 方法们 Socket (): 创建一个Socket Bind(): 绑定一个本地的IP和端 (IPEndPoint) Listen(): 让Sock

16、et侦听传入的连接尝试,并指定侦听队列容量 Connect(): 初始化与另一个Socket的连接 Accept(): 接收连接并返回一个新的socket Send(): 输出数据到Socket Receive(): 从Socket中读取数据 Close(): 关闭Socket (销毁连接)Demo2:发送文字信息北京传智播客教育 讲师:王承伟高级软件人才实作培训专家Socket通信基本流程图高级软件人才实作培训专家基于TCP的Socket编程 TCP service:可靠的字节流传输client2.Socket()Connect()4.Send( )7.ReceiveClose( )TCP conn. requestTCP ACK1. Socket() Bind() Listen()3. accept( )5. Receive( )6. Send( )8. Close( )server由软件工程师控制由操作系统控制processsocket TCP with buffers, variablesinter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论