版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京传智播客教育聊天程序
(基于Socket,Thread)讲师:王承伟理解委托理解简单的IO前提:简单回顾委托什么是委托?(安全的函数指针)通俗:就是一个能存放符合某种格式(方法签名)的方法的指针的清单
委托创建方式准备一个方法:stringHelloU(stringuName){//方法代码}声明委托:delegate返回值类型委托类型名(参数) 例子:delegatestringDGSayHi(stringuName);创建委托对象:DGSayHidgSay=newDGSayHi(HelloU);或者:DGSayHidgSay=HelloU;//newDGSayHi(HelloU);追加方法:bine(,)删除方法:dgSay-=HelloU3;委托调用方式dgSay("binggo");//dgSay.Invoke("binggo");画图委托作为参数声明使用委托做参数的方法:
voidIntenationalSayHi(stringuName,DGSayHidgSh)
{//业务代码
dgSh(uName);//业务代码
}调用执行: 传委托对象:
InternationalSayHi("biggo",dgSay); 直接传有和委托相同方法签名的方法:
InternationalSayHi("biggo",HelloU);
InternationalSayHi("biggo",newDGSayHi(HelloU));委托原理*文件流FileStream文件流FileStream对象表示在磁盘或网络路径上指向文件的流使用
FileStream
类对文件系统上的文件进行读取、写入、打开和关闭操作FileStream
对输入输出进行缓冲,从而提高性能为什么不用File.ReadAllText()?好处之一就是:对于大文件来说,FileStream可以对文件采取分段读取,即每次只读取一部分到内存。字符串和字节数组转换字节数组转换成字符串:StringSystem.Text.Encoding.UTF8.GetString(byte[])字符串转换成字节数组:byte[]System.Text.Encoding.UTF8.GetBytes(String)多线程为什么要用多线程让计算机"同时"做多件事情,节约时间。后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况。多线程可以让一个程序“同时”处理多个事情。计算机cpu大部分时间处于空闲状态,浪费了cpu资源。Demo1:单线程带来的问题程序1程序2线程1线程2线程3线程1线程2线程3多线程进程与线程一个进程至少有一个线程同一个进程中的多个线程之间可以"并发"执行.net中如何实现多线程1线程肯定也是要执行一段代码的。所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。(找个人来做一件事情)线程启动时,通过委托调用该方法。 (委托的好处)(线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法).net中如何实现多线程2产生一个线程的4步骤:编写产生线程所要执行的方法引用System.Threading命名空间实例化Thread类,并传入一个指向线程所要运行方法的委托。(这时候这个线程已经产生,但是还没有运行)调用Thread实例的Start方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定。Demo2:两个线程同时运行(画图)前台线程和后台线程前台线程:只有所有的前台线程都关闭才能完成程序关闭。后台线程:只要所有的前台线程结束,后台线程自动结束。Thread类的一些重要成员(*)Start()启动线程Abort()终止线程Thread.Sleep(1)静态方法,可以使当前线程停止一段时间运行Name线程名Thread.CurrentThread获得当前的线程引用数据的插入Demo3:线程中如何访问控件Demo4:执行带参数的方法线程的调度方式*1.非抢占式调度:
指某个线程在运行时不会被操作系统强制暂停,它可以持续地运行直至运行告一段落井主动地交出运行权。在这样的调度模式之下,线程的运行就完全是单队列的,并且可能产生恶意程序长期霸占运行权的情况。而且一旦一个程序死了,那么整个电脑就只好重启啦~~!2.抢占式调度:
指每个线程都只有极少的运行时间(在Windows内核模式下这个时间不会超过20ms),而当时间用完时该线程就会被强制暂停,保存上下文并把CPU运行权利交给下一个线程,这样调度的结果就是所有的线程都在被快速地切换运行,使得使用者感觉所有的线程在"并行"运行。SOCKET网络编程Socket相关概念socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)socket非常类似于电话插座。以一个电话网为例。电话的通话双方相当于相互通信的2个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。Socket相关概念在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)。例如:http使用80端口ftp使用21端口smtp25端口有两种类型:流式Socket(STREAM):
是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低;数据报式Socket(DATAGRAM):
是一种无连接的Socket,对应于无连接的UDP服务应用.不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高.Socket一般应用模式(服务器端和客户端)1.服务端ingsocket开始监听端口(负责监听客户端连接信息)
2.客户端clientsocket连接服务端指定端口(负责接收和发送服务端消息)
3.服务端ingsocket监听到客户端连接,创建connectionsocket。(负责和客户端通信)1.2.3.负责监听‘连接请求’的套接字客户端套接字负责和客户端通信的套接字Socket一般应用模式(服务器端和客户端)服务器端的Socket(至少需要两个)一个负责接收客户端连接请求(但不负责与客户端通信)每成功接收到一个客户端的连接便在服务端产生一个对应的负责通信的Socket在接收到客户端连接时创建.为每个连接成功的客户端请求在服务端都创建一个对应的Socket(负责和客户端通信).客户端的Socket客户端Socket必须指定要连接的服务端地址和端口。通过创建一个Socket对象来初始化一个到服务器端的TCP连接。
Socket的通讯过程服务器端:申请一个socket绑定到一个IP地址和一个端口上开启侦听,等待接授连接客户端:申请一个socket连接服务器(指明IP地址和端口号)服务器端接到连接请求后,产生一个新的socket(端口大于1024小于65535)与客户端建立连接并进行通讯,原监听socket继续监听。连接通过构造函数完成。
publicSocket(AddressFamilyaddressFamily,SocketTypesocketType,ProtocolTypeprotocolType)AddressFamily
成员指定
Socket
用来解析地址的寻址方案。例如,InterNetwork
指示当
Socket使用一个IP版本4地址连接。SocketType
定义要打开的
Socket
的类型Socket
类使用
ProtocolType
枚举向WindowsSocketsAPI
通知所请求的协议Socket的构造函数
如:mySocket=newSocket(AddressFamily.InterNetwork,
SocketType.Stream,ProtocolType.Tcp);Demo1:监听注意:至少要定义一个要连接的远程主机的IP和端口号。端口号必须在1和65535之间,最好在1024以后。要连接的远程主机必须正在监听指定端口,也就是说你无法随意连接远程主机。如:IPAddressaddr=IPAddress.Parse("");IPEndPointendp=newIPEndPoint(addr,10001); 服务端先绑定:eSocket.Bind(endp) 客户端再连接:clientSocket.Connect(endp)注意:一个Socket一次只能连接一台主机。Socket关闭后无法再次使用。每个Socket对象只能一台远程主机连接.如果你想连接到多台远程主机,你必须创建多个Socket对象。------------------相关类--------------------------IPAddress类:包含了一个IP地址IPEndPoint类:包含了一对IP地址和端口号--------------------方法们------------------------------Socket():创建一个SocketBind():绑定一个本地的IP和端口号(IPEndPoint)Listen():让Socket侦听传入的连接尝试,并指定侦听队列容量Connect():初始化与另一个Socket的连接Accept():接收连接并返回一个新的socketSend():输出数据到SocketReceive():从Socket中读取数据Close():关闭Socket(销毁连接)Socket方法Demo2:发送文字信息Socket通信基本流程图基于TCP的Socket编程TCPservice:可靠的字节流传输
processTCPwithbuffers,variablessocket由软件工程师控制由操作系统控制processTCPwithbuffers,variablessocketinternetclientserverSocket()Connect()Socket()Bind()Listen()accept()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 警察现场救护学习通超星期末考试答案章节答案2024年
- 2024年西宁客运资格证模拟题
- 2024年三亚申请客运从业资格证版试题
- 安徽省合肥市第四十五中学森林城分校2024-2025学年九年级上学期期中考试语文试题
- 支付系统应急预案
- 城市道路照明节能路灯合同范本
- 劳务分包合同索赔与反索赔实例
- 河北省建筑安装合同模板
- 森林防火工程委托施工合同
- 煤矿加固改造合同
- 医科大学2024年12月精神科护理学作业考核试题答卷
- 论青少年合理怀疑精神的培育
- 机关干部礼仪培训课件
- 安徽省合肥市2024年七年级上学期期中数学试卷【附答案】
- 成都铁路局招聘2024届高校毕业生663人高频难、易错点500题模拟试题附带答案详解
- 2024-2025学年浙教版八年级上册科学期中模拟卷
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 智能制造工程生涯发展报告
- 二级公立医院绩效考核三级手术目录(2020版)
- 品牌授权工厂生产授权书合同
- 6人小品《没有学习的人不伤心》台词完整版
评论
0/150
提交评论