下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北京傳智播客教育聊天程序
(基于Socket,Thread)講師:王承偉理解委托理解簡(jiǎn)單的IO前提:簡(jiǎn)單回顧委托什么是委托?(安全的函數(shù)指針)通俗:就是一個(gè)能存放符合某種格式(方法簽名)的方法的指針的清單
委托創(chuàng)建方式準(zhǔn)備一個(gè)方法:stringHelloU(stringuName){//方法代碼}聲明委托:delegate返回值類型委托類型名(參數(shù)) 例子:delegatestringDGSayHi(stringuName);創(chuàng)建委托對(duì)象:DGSayHidgSay=newDGSayHi(HelloU);或者:DGSayHidgSay=HelloU;//newDGSayHi(HelloU);追加方法:bine(,)刪除方法:dgSay-=HelloU3;委托調(diào)用方式dgSay("binggo");//dgSay.Invoke("binggo");畫圖委托作為參數(shù)聲明使用委托做參數(shù)的方法:
voidIntenationalSayHi(stringuName,DGSayHidgSh)
{//業(yè)務(wù)代碼
dgSh(uName);//業(yè)務(wù)代碼
}調(diào)用執(zhí)行: 傳委托對(duì)象:
InternationalSayHi("biggo",dgSay); 直接傳有和委托相同方法簽名的方法:
InternationalSayHi("biggo",HelloU);
InternationalSayHi("biggo",newDGSayHi(HelloU));委托原理*文件流FileStream文件流FileStream對(duì)象表示在磁盤或網(wǎng)絡(luò)路徑上指向文件的流使用
FileStream
類對(duì)文件系統(tǒng)上的文件進(jìn)行讀取、寫入、打開和關(guān)閉操作FileStream
對(duì)輸入輸出進(jìn)行緩沖,從而提高性能為什么不用File.ReadAllText()?好處之一就是:對(duì)于大文件來說,F(xiàn)ileStream可以對(duì)文件采取分段讀取,即每次只讀取一部分到內(nèi)存。字符串和字節(jié)數(shù)組轉(zhuǎn)換字節(jié)數(shù)組轉(zhuǎn)換成字符串:StringSystem.Text.Encoding.UTF8.GetString(byte[])字符串轉(zhuǎn)換成字節(jié)數(shù)組:byte[]System.Text.Encoding.UTF8.GetBytes(String)多線程為什么要用多線程讓計(jì)算機(jī)"同時(shí)"做多件事情,節(jié)約時(shí)間。后臺(tái)運(yùn)行程序,提高程序的運(yùn)行效率,也不會(huì)使主界面出現(xiàn)無響應(yīng)的情況。多線程可以讓一個(gè)程序“同時(shí)”處理多個(gè)事情。計(jì)算機(jī)cpu大部分時(shí)間處于空閑狀態(tài),浪費(fèi)了cpu資源。Demo1:單線程帶來的問題程序1程序2線程1線程2線程3線程1線程2線程3多線程進(jìn)程與線程一個(gè)進(jìn)程至少有一個(gè)線程同一個(gè)進(jìn)程中的多個(gè)線程之間可以"并發(fā)"執(zhí)行.net中如何實(shí)現(xiàn)多線程1線程肯定也是要執(zhí)行一段代碼的。所以要產(chǎn)生一個(gè)線程,必須先為該線程寫一個(gè)方法,這個(gè)方法中的代碼就是該線程運(yùn)行所要執(zhí)行的代碼。(找個(gè)人來做一件事情)線程啟動(dòng)時(shí),通過委托調(diào)用該方法。 (委托的好處)(線程啟動(dòng)時(shí),調(diào)用傳過來的委托,委托就會(huì)執(zhí)行相應(yīng)的方法,實(shí)現(xiàn)線程執(zhí)行方法).net中如何實(shí)現(xiàn)多線程2產(chǎn)生一個(gè)線程的4步驟:編寫產(chǎn)生線程所要執(zhí)行的方法引用System.Threading命名空間實(shí)例化Thread類,并傳入一個(gè)指向線程所要運(yùn)行方法的委托。(這時(shí)候這個(gè)線程已經(jīng)產(chǎn)生,但是還沒有運(yùn)行)調(diào)用Thread實(shí)例的Start方法,標(biāo)記該線程可以被CPU執(zhí)行了,但具體執(zhí)行時(shí)間由CPU決定。Demo2:兩個(gè)線程同時(shí)運(yùn)行(畫圖)前臺(tái)線程和后臺(tái)線程前臺(tái)線程:只有所有的前臺(tái)線程都關(guān)閉才能完成程序關(guān)閉。后臺(tái)線程:只要所有的前臺(tái)線程結(jié)束,后臺(tái)線程自動(dòng)結(jié)束。Thread類的一些重要成員(*)Start()啟動(dòng)線程Abort()終止線程Thread.Sleep(1)靜態(tài)方法,可以使當(dāng)前線程停止一段時(shí)間運(yùn)行Name線程名Thread.CurrentThread獲得當(dāng)前的線程引用數(shù)據(jù)的插入Demo3:線程中如何訪問控件Demo4:執(zhí)行帶參數(shù)的方法線程的調(diào)度方式*1.非搶占式調(diào)度:
指某個(gè)線程在運(yùn)行時(shí)不會(huì)被操作系統(tǒng)強(qiáng)制暫停,它可以持續(xù)地運(yùn)行直至運(yùn)行告一段落井主動(dòng)地交出運(yùn)行權(quán)。在這樣的調(diào)度模式之下,線程的運(yùn)行就完全是單隊(duì)列的,并且可能產(chǎn)生惡意程序長(zhǎng)期霸占運(yùn)行權(quán)的情況。而且一旦一個(gè)程序死了,那么整個(gè)電腦就只好重啟啦~~!2.搶占式調(diào)度:
指每個(gè)線程都只有極少的運(yùn)行時(shí)間(在Windows內(nèi)核模式下這個(gè)時(shí)間不會(huì)超過20ms),而當(dāng)時(shí)間用完時(shí)該線程就會(huì)被強(qiáng)制暫停,保存上下文并把CPU運(yùn)行權(quán)利交給下一個(gè)線程,這樣調(diào)度的結(jié)果就是所有的線程都在被快速地切換運(yùn)行,使得使用者感覺所有的線程在"并行"運(yùn)行。SOCKET網(wǎng)絡(luò)編程Socket相關(guān)概念socket的英文原義是“孔”或“插座”。作為進(jìn)程通信機(jī)制,取后一種意思。通常也稱作“套接字”,用于描述IP地址和端口,是一個(gè)通信鏈的句柄。(其實(shí)就是兩個(gè)程序通信用的。)socket非常類似于電話插座。以一個(gè)電話網(wǎng)為例。電話的通話雙方相當(dāng)于相互通信的2個(gè)程序,電話號(hào)碼就是IP地址。任何用戶在通話之前,首先要占有一部電話機(jī),相當(dāng)于申請(qǐng)一個(gè)socket;同時(shí)要知道對(duì)方的號(hào)碼,相當(dāng)于對(duì)方有一個(gè)固定的socket。然后向?qū)Ψ綋芴?hào)呼叫,相當(dāng)于發(fā)出連接請(qǐng)求。對(duì)方假如在場(chǎng)并空閑,拿起電話話筒,雙方就可以正式通話,相當(dāng)于連接成功。雙方通話的過程,是一方向電話機(jī)發(fā)出信號(hào)和對(duì)方從電話機(jī)接收信號(hào)的過程,相當(dāng)于向socket發(fā)送數(shù)據(jù)和從socket接收數(shù)據(jù)。通話結(jié)束后,一方掛起電話機(jī)相當(dāng)于關(guān)閉socket,撤消連接。Socket相關(guān)概念在Internet上有很多這樣的主機(jī),這些主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,同時(shí)提供幾種服務(wù)。每種服務(wù)都打開一個(gè)Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)(應(yīng)用程序)。例如:http使用80端口ftp使用21端口smtp25端口有兩種類型:流式Socket(STREAM):
是一種面向連接的Socket,針對(duì)于面向連接的TCP服務(wù)應(yīng)用,安全,但是效率低;數(shù)據(jù)報(bào)式Socket(DATAGRAM):
是一種無連接的Socket,對(duì)應(yīng)于無連接的UDP服務(wù)應(yīng)用.不安全(丟失,順序混亂,在接收端要分析重排及要求重發(fā)),但效率高.Socket一般應(yīng)用模式(服務(wù)器端和客戶端)1.服務(wù)端ingsocket開始監(jiān)聽端口(負(fù)責(zé)監(jiān)聽客戶端連接信息)
2.客戶端clientsocket連接服務(wù)端指定端口(負(fù)責(zé)接收和發(fā)送服務(wù)端消息)
3.服務(wù)端ingsocket監(jiān)聽到客戶端連接,創(chuàng)建connectionsocket。(負(fù)責(zé)和客戶端通信)1.2.3.負(fù)責(zé)監(jiān)聽‘連接請(qǐng)求’的套接字客戶端套接字負(fù)責(zé)和客戶端通信的套接字Socket一般應(yīng)用模式(服務(wù)器端和客戶端)服務(wù)器端的Socket(至少需要兩個(gè))一個(gè)負(fù)責(zé)接收客戶端連接請(qǐng)求(但不負(fù)責(zé)與客戶端通信)每成功接收到一個(gè)客戶端的連接便在服務(wù)端產(chǎn)生一個(gè)對(duì)應(yīng)的負(fù)責(zé)通信的Socket在接收到客戶端連接時(shí)創(chuàng)建.為每個(gè)連接成功的客戶端請(qǐng)求在服務(wù)端都創(chuàng)建一個(gè)對(duì)應(yīng)的Socket(負(fù)責(zé)和客戶端通信).客戶端的Socket客戶端Socket必須指定要連接的服務(wù)端地址和端口。通過創(chuàng)建一個(gè)Socket對(duì)象來初始化一個(gè)到服務(wù)器端的TCP連接。
Socket的通訊過程服務(wù)器端:申請(qǐng)一個(gè)socket綁定到一個(gè)IP地址和一個(gè)端口上開啟偵聽,等待接授連接客戶端:申請(qǐng)一個(gè)socket連接服務(wù)器(指明IP地址和端口號(hào))服務(wù)器端接到連接請(qǐng)求后,產(chǎn)生一個(gè)新的socket(端口大于1024小于65535)與客戶端建立連接并進(jìn)行通訊,原監(jiān)聽socket繼續(xù)監(jiān)聽。連接通過構(gòu)造函數(shù)完成。
publicSocket(AddressFamilyaddressFamily,SocketTypesocketType,ProtocolTypeprotocolType)AddressFamily
成員指定
Socket
用來解析地址的尋址方案。例如,InterNetwork
指示當(dāng)
Socket使用一個(gè)IP版本4地址連接。SocketType
定義要打開的
Socket
的類型Socket
類使用
ProtocolType
枚舉向WindowsSocketsAPI
通知所請(qǐng)求的協(xié)議Socket的構(gòu)造函數(shù)
如:mySocket=newSocket(AddressFamily.InterNetwork,
SocketType.Stream,ProtocolType.Tcp);Demo1:監(jiān)聽注意:至少要定義一個(gè)要連接的遠(yuǎn)程主機(jī)的IP和端口號(hào)。端口號(hào)必須在1和65535之間,最好在1024以后。要連接的遠(yuǎn)程主機(jī)必須正在監(jiān)聽指定端口,也就是說你無法隨意連接遠(yuǎn)程主機(jī)。如:IPAddressaddr=IPAddress.Parse("");IPEndPointendp=newIPEndPoint(addr,10001); 服務(wù)端先綁定:eSocket.Bind(endp) 客戶端再連接:clientSocket.Connect(endp)注意:一個(gè)Socket一次只能連接一臺(tái)主機(jī)。Socket關(guān)閉后無法再次使用。每個(gè)Socket對(duì)象只能一臺(tái)遠(yuǎn)程主機(jī)連接.如果你想連接到多臺(tái)遠(yuǎn)程主機(jī),你必須創(chuàng)建多個(gè)Socket對(duì)象。------------------相關(guān)類--------------------------IPAddress類:包含了一個(gè)IP地址IPEndPoint類:包含了一對(duì)IP地址和端口號(hào)--------------------方法們------------------------------Socket():創(chuàng)建一個(gè)SocketBind():綁定一個(gè)本地的IP和端口號(hào)(IPEndPoint)Listen():讓Socket偵聽傳入的連接嘗試,并指定偵聽隊(duì)列容量Connect():初始化與另一個(gè)Socket的連接Accept():接收連接并返回一個(gè)新的socketSend():輸出數(shù)據(jù)到SocketReceive():從Socket中讀取數(shù)據(jù)Close():關(guān)閉Socket(銷毀連接)Socket方法Demo2:發(fā)送文字信息Socket通信基本流程圖基于TCP的Socket編程TCPservice:可靠的字節(jié)流傳輸
processTCPwithbuffers,variablessocket由軟件工程師控制由操作系統(tǒng)控制processTCPwithbuffers,variablessocketinternetclientserverSocket()Connect()Socket()Bind()Listen()accept()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年北師大版八年級(jí)英語上冊(cè)月考試卷
- 2024年新科版八年級(jí)生物下冊(cè)階段測(cè)試試卷
- 商業(yè)領(lǐng)域中社交媒體的創(chuàng)新思維實(shí)踐
- 2024年甲方對(duì)乙方出售汽車制造用廠房合同
- 2025中國(guó)郵政集團(tuán)公司松原市分公司招聘7人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 工業(yè)縫制機(jī)械相關(guān)行業(yè)投資規(guī)劃報(bào)告范本
- 2025中國(guó)電信湖北十堰分公司招聘17人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)建筑第二工程局限公司招聘實(shí)習(xí)生40人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)華電集團(tuán)限公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中共佛山市禪城區(qū)委組織部公開招聘專業(yè)技術(shù)崗位雇員1人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 設(shè)計(jì)中的重點(diǎn)、難點(diǎn)及關(guān)鍵技術(shù)問題的把握控制及相應(yīng)措施
- 幼兒園教學(xué)活動(dòng) 幼兒園教學(xué)活動(dòng)概述 幼兒園教學(xué)活動(dòng)的特點(diǎn)
- 6.2.1向量的加法運(yùn)算 課件(共14張PPT)
- YY/T 1866-2023一次性使用無菌肛腸套扎器膠圈或彈力線式
- 海蒂(世界文學(xué)名著經(jīng)典)
- 中國(guó)馬克思主義與當(dāng)代知到章節(jié)答案智慧樹2023年西安交通大學(xué)
- 變電站檢修規(guī)程完整
- 海南文昌2x460MW級(jí)燃?xì)?蒸汽聯(lián)合循環(huán)電廠
- 形式邏輯學(xué)全套課件
- 姜安《政治學(xué)概論》(第2版)筆記和典型題(含考研真題)詳解
- 國(guó)開電大公共行政學(xué)形考任務(wù)二答案
評(píng)論
0/150
提交評(píng)論