<span id="plx27"><var id="plx27"></var></span>
<dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>

    Visual_C++網(wǎng)絡(luò)編程技術(shù)-03

    上傳人:fgh****35 文檔編號:248210742 上傳時(shí)間:2024-10-22 格式:PPT 頁數(shù):26 大?。?,014.50KB
    收藏 版權(quán)申訴 舉報(bào) 下載
    Visual_C++網(wǎng)絡(luò)編程技術(shù)-03_第1頁
    第1頁 / 共26頁
    Visual_C++網(wǎng)絡(luò)編程技術(shù)-03_第2頁
    第2頁 / 共26頁
    Visual_C++網(wǎng)絡(luò)編程技術(shù)-03_第3頁
    第3頁 / 共26頁

    下載文檔到電腦,查找使用更方便

    15 積分

    下載資源

    還剩頁未讀,繼續(xù)閱讀

    資源描述:

    《Visual_C++網(wǎng)絡(luò)編程技術(shù)-03》由會員分享,可在線閱讀,更多相關(guān)《Visual_C++網(wǎng)絡(luò)編程技術(shù)-03(26頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

    1、單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,單擊此處編輯母版標(biāo)題樣式,網(wǎng)絡(luò)編程技術(shù),文件傳輸,授課教師:,網(wǎng)絡(luò)編程,導(dǎo)入,在電子教室軟件系統(tǒng)中,教師經(jīng)常需要通過教師機(jī)向所有學(xué)生下發(fā)文件,傳遞授課資料,有時(shí)也需要學(xué)生將完成的作業(yè)上傳到教師機(jī),這就涉及到一個(gè)文件傳輸?shù)膯栴},本章我們就通過一個(gè)簡單的文件傳輸程序。,本章要點(diǎn),文件傳輸功能分析設(shè)計(jì),文件操作編程技術(shù),多線程編程技術(shù),文件下發(fā)程序?qū)崿F(xiàn),功能需求分析,包含兩個(gè)程序,一個(gè)發(fā)送端程序,一個(gè)接收端程序。,發(fā)送端程序可以由用戶選擇要發(fā)送的文件。,發(fā)送端程序可以指定發(fā)送對象,可以是一個(gè),IP,范圍,也可以是某個(gè),IP,地址。,接收端

    2、程序可以由用戶指定接收到的文件的存放地址。,界面設(shè)計(jì),關(guān)鍵技術(shù)分析,文件傳輸?shù)谋举|(zhì)用一句話概括就是:發(fā)送方將文件數(shù)據(jù)讀出來,然后調(diào)用套接字的發(fā)送函數(shù)將數(shù)據(jù)傳輸?shù)浇邮辗?,接收方調(diào)用套接字接收函數(shù)接收數(shù)據(jù),然后重新建立文件并將數(shù)據(jù)寫入文件。,文件傳輸流程,發(fā)送文件功能的實(shí)現(xiàn),接收文件功能的實(shí)現(xiàn)流程,代碼詳解,文件操作,CFile,類:,CFile,類是,MFC,文件類的基類,提供非緩沖方式的二進(jìn)制磁盤輸入、輸出功能;并直接通過派生類來支持文本文件和內(nèi)存文件。提供訪問本地文件內(nèi)容的功能,不支持訪問網(wǎng)絡(luò)文件的功能。,使用,CFile,操作文件的基本過程是:,定義,CFile,對象,打開要操作的文件,對

    3、文件,/,寫文件,關(guān)閉文件,文件操作,Open(),函數(shù),該函數(shù)的功能是打開指定文件。,BOOL,CFile:Open(LPCTSTR,lpszFileName,UINT,nOpenFlags,CFileException,*,pException,),參數(shù),lpszFileName,:帶完整路徑的文件名,指定要打開的文件。,參數(shù),nOpenFlags,:指定文件打開方式,可以是多個(gè)標(biāo)志的組合。,文件操作,Read(),函數(shù),該函數(shù)的功能是從文件中讀取文件內(nèi)容。,virtual UINT,CFile:Read,(void*,lpBuf,UINT,nCount,);,參數(shù),lpBuf,:存放讀出

    4、的文件內(nèi)容的空間地址。,參數(shù),nCount,:從文件讀出的最大字節(jié)數(shù)。,文件操作,Write(),函數(shù),該函數(shù)的功能是向文件中寫數(shù)據(jù),virtual void Write(const void*,lpBuf,UINT,nCount,);,參數(shù),lpBuf,:存儲要寫入文件的數(shù)據(jù)的空間地址。,參數(shù),nCount,:要寫入文件的數(shù)據(jù)的字節(jié)數(shù)。,文件操作,Close(),函數(shù),功能是關(guān)閉文件句柄。,文件操作完畢必須調(diào)用,Close(),函數(shù)關(guān)閉文件。,第一步程序擴(kuò)展,實(shí)現(xiàn)較大文件的傳輸,上面文件傳輸實(shí)例的功能并不強(qiáng)大,但是它的實(shí)現(xiàn)過程很簡單,說明了文件傳輸?shù)脑怼?它忽略了真實(shí)文件的大小,在上面的代

    5、碼中,為了從文件中讀取數(shù)據(jù),首先獲得文件長度,然后開辟一段和文件長度匹配的內(nèi)存作為文件緩沖。但現(xiàn)在很多文件動輒幾百兆字節(jié),往往無法一次開辟如此大的內(nèi)存容納如此多的數(shù)據(jù)。所以對于大文件傳輸,這段代碼顯然不合適。,解決方法:,分段緩沖文件數(shù)據(jù)。,實(shí)現(xiàn)方法詳見代碼,第二步程序擴(kuò)展,同時(shí)向多個(gè)目標(biāo)傳輸文件,教師機(jī)通常需要控制整個(gè)教室所有的學(xué)生機(jī),需要進(jìn)行一對多的文件傳輸,需要用戶在界面上指出需要發(fā)送文件的對象(例如學(xué)生機(jī)的,IP,地址范圍),考慮傳輸效率,,,需要采用多線程技術(shù)。,什么是多線程技術(shù)?,多線程是為了同步完成多項(xiàng)任務(wù),多線程不是為了提高運(yùn)行效率,而是為了通過提高資源使用效率來提高系統(tǒng)的效率

    6、。,線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行,也可以把它理解為代碼運(yùn)行的上下文。,線程負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào)度和執(zhí)行。,實(shí)現(xiàn)發(fā)送文件功能的主線程流程,多線程實(shí)現(xiàn)代碼,在本程序中,多線程編程涉及三處代碼,第一處是創(chuàng)建一個(gè)新線程,使用,CreateThread,函數(shù):,CreateThread(NULL,0,SendFileThread,(LPVOID)pMeg,NULL,NULL);,函數(shù),CreateThread,是微軟在,Windows API,中提供的,可用于建立新線程。,CreateThread,將在主線程的基礎(chǔ)上創(chuàng)建一個(gè)新線程

    7、。,多線程實(shí)現(xiàn)代碼,第二處是定義線程函數(shù):,ULONG WINAPI,SendFileThread(LPVOID,p);,SendFileThread,是線程的名字,可根據(jù)需要自行定義,應(yīng)該定義在對應(yīng)的頭文件中,且一定要定義為全局的。,多線程實(shí)現(xiàn)代碼,第三處是線程函數(shù)的實(shí)現(xiàn):,ULONG WINAPI,SendFileThread(LPVOID,p),/,此處寫實(shí)現(xiàn)線程具體功能的代碼,線程的參數(shù)傳遞,考慮到在創(chuàng)建每個(gè)新線程時(shí),需要將待發(fā)送文件的地址和發(fā)送對象的,IP,地址傳遞給新線程,因此需要傳遞兩個(gè)字符串參數(shù)給線程,按照創(chuàng)建線程函數(shù)的定義,只能傳遞一個(gè)指向結(jié)構(gòu)的指針,因此需要定義一個(gè)結(jié)構(gòu)體,

    8、專門存放需要傳遞給線程的數(shù)據(jù)。結(jié)構(gòu)體定義如下:,typedef,struct,char ip15;/,文件傳遞目的地,IP,char fileAddr50;/,帶路徑的文件名,myMeg,;,線程的參數(shù)傳遞,myMeg,*,pMeg,;/,定義一個(gè)指向,myMeg,結(jié)構(gòu)體的指針,pMeg,=(,myMeg,*),malloc(sizeof(myMeg,);/,給指針分配空間,memcpy(pMeg,-ip,ip,15);/,將,IP,地址放入結(jié)構(gòu)體,memcpy(pMeg,-fileAddr,file,50);/,將文件地址放入結(jié)構(gòu)體,CreateThread(NULL,0,SendFileT

    9、hread,(LPVOID)pMeg,NULL,NULL);,/,創(chuàng)建一個(gè)新線程,將結(jié)構(gòu)體指針作為參數(shù)傳遞給線程,線程的參數(shù)傳遞,在新線程中,可以從參數(shù)中取出對應(yīng)的數(shù)據(jù),代碼如下:,ULONG WINAPI,SendFileThread(LPVOID,p),myMeg,*meg=(,myMeg,*)p;,CString,strIP,=meg-,ip,;,CString,fileAddr,=meg-,fileAddr,;,本章技能訓(xùn)練實(shí)例,網(wǎng)絡(luò)考試報(bào)名系統(tǒng)擴(kuò)展,實(shí)驗(yàn)題目:多線程考試報(bào)名系統(tǒng)服務(wù)器的實(shí)現(xiàn),實(shí)驗(yàn)?zāi)康模赫莆斩嗑€程編程技術(shù)和文件操作技術(shù),要求:服務(wù)器端采用多線程技術(shù),在線程中使用循環(huán)接收客戶的報(bào)名信息。,Thank You!,

    展開閱讀全文
    溫馨提示:
    1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
    2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
    3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
    4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
    5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
    6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
    7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

    相關(guān)資源

    更多
    正為您匹配相似的精品文檔
    關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

    copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

    備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


    本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!

    欧美久久久一区二区三区,国产精品亚洲一区二区无码,亚洲国产精品综合久久20声音,亚洲国产精品无码久久久蜜芽
    <span id="plx27"><var id="plx27"></var></span>
    <dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>