




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Internet網(wǎng)絡(luò)程序設(shè)計(jì)試驗(yàn)匯報(bào)基于Socket的文獻(xiàn)傳播程序設(shè)計(jì)姓名:莫敵班級(jí):軟件0904學(xué)號(hào):U17895指導(dǎo)老師:陸永忠.03.31目錄1 試驗(yàn)?zāi)康募耙?guī)定 21.1 試驗(yàn)?zāi)康?21.2 試驗(yàn)規(guī)定 22 試驗(yàn)環(huán)境 33 試驗(yàn)程序設(shè)計(jì) 33.1 設(shè)計(jì)思想 33.2 程序設(shè)計(jì)流程框圖 43.3 詳細(xì)設(shè)計(jì) 53.3.1 界面設(shè)計(jì) 53.3.2 重要功能實(shí)現(xiàn) 63.4 運(yùn)行成果 94 試驗(yàn)感想 11試驗(yàn)?zāi)康募耙?guī)定試驗(yàn)?zāi)康氖煜ocket的通訊機(jī)制,理解網(wǎng)絡(luò)程序的設(shè)計(jì)措施。重點(diǎn)掌握基于TCP協(xié)議的Socket網(wǎng)絡(luò)編程。試驗(yàn)規(guī)定設(shè)計(jì)界面,在服務(wù)器端和客戶(hù)端傳播圖片和文獻(xiàn)。假如是圖片請(qǐng)顯示該圖片,假如是其他文獻(xiàn),則保留。試驗(yàn)環(huán)境編譯環(huán)境:Windows7+VisualStudio使用MFC編寫(xiě)。運(yùn)行環(huán)境:Windows7操作系統(tǒng)。試驗(yàn)程序設(shè)計(jì)設(shè)計(jì)思想根據(jù)試驗(yàn)的規(guī)定:在服務(wù)器和客戶(hù)端之間傳播文獻(xiàn)和圖片,則需要程序提供一種可靠的網(wǎng)絡(luò)傳播服務(wù)來(lái)保證文獻(xiàn)在傳播過(guò)程中無(wú)丟失、損壞。在分析了傳播層協(xié)議TCP協(xié)議和UDP協(xié)議后,理解到TCP協(xié)議提供的是一種面向連接的、可靠的字節(jié)流服務(wù),而UDP協(xié)議提供的是一種無(wú)連接的、不可靠的數(shù)據(jù)報(bào)服務(wù)。由于程序的需求,即必須保證文獻(xiàn)傳播的可靠性,于是,我采用基于TCP協(xié)議的Windowssockets來(lái)設(shè)計(jì)實(shí)現(xiàn)本試驗(yàn)。程序設(shè)計(jì)流程框圖創(chuàng)立新的通信端點(diǎn)創(chuàng)立新的通信端點(diǎn)將一種當(dāng)?shù)氐刂逢P(guān)聯(lián)到套接字上宣布接受連接,給出監(jiān)聽(tīng)隊(duì)列大小阻塞,直到有客戶(hù)企圖連接發(fā)送/接受數(shù)據(jù)釋放連接結(jié)束開(kāi)始積極嘗試建立一種連接創(chuàng)立新的通信端點(diǎn)發(fā)送/接受數(shù)據(jù)釋放連接結(jié)束開(kāi)始服務(wù)器端客戶(hù)端圖1程序設(shè)計(jì)流程框圖詳細(xì)設(shè)計(jì)基于TCP的socket編程流程:服務(wù)器端:創(chuàng)立套接字(socket)。將套接字綁定到一種當(dāng)?shù)氐刂泛投丝谏希╞ind)。將套接字設(shè)為監(jiān)聽(tīng)模式,準(zhǔn)備接受客戶(hù)端祈求(listen)。等待客戶(hù)端祈求到來(lái)。當(dāng)祈求到來(lái)后,接受連接祈求,返回一種新的對(duì)應(yīng)于本次連接的套件字(accept)。用返回的套接字和客戶(hù)端進(jìn)行通信(send/recv)。返回,等待另一客戶(hù)端祈求。關(guān)閉套接字??蛻?hù)端:創(chuàng)立套接字(socket)。向服務(wù)器發(fā)出連接祈求(connect)。和服務(wù)器端進(jìn)行通信(send/recv)。關(guān)閉套接字。界面設(shè)計(jì)圖2程序界面由于程序?qū)崿F(xiàn)的功能單一簡(jiǎn)樸,因此我的程序界面設(shè)計(jì)如圖2所示。程序由兩個(gè)顧客可操作的控件構(gòu)成:IP地址控件,顧客輸入將要接受文獻(xiàn)的接受方IP地址;“發(fā)送文獻(xiàn)”按鈕,單擊選擇顧客要發(fā)送的文獻(xiàn)并發(fā)送所選文獻(xiàn)數(shù)據(jù)。重要功能實(shí)現(xiàn)套接字庫(kù)加載:AfxSocketInit()接受線程:UINTRecvProc(LPVOIDpParam){ while(TRUE) { CSockettmpSock; CSocketservSock; tmpSock.Create(5000); tmpSock.Listen(1); tmpSock.Accept(servSock); charfileNameRecv[500]={0}; inta=servSock.Receive(fileNameRecv,500); CFileDialogsaveDlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "所有文獻(xiàn)(*.*)|*.*||"); saveDlg.m_ofn.lpstrFile=fileNameRecv; if(IDOK==saveDlg.DoModal()) { CFilerecvFile; CStringrecvPathName; recvPathName=saveDlg.GetPathName(); recvFile.Open(recvPathName,CFile::modeCreate|CFile::modeWrite); UINTuiLength; servSock.Receive(&uiLength,4); intiBufSize=1024*5; intiSize=iBufSize; LPBYTEpBuf=newBYTE[iBufSize]; intiNumByte; UINTuiTotal=0; while(uiTotal<uiLength) { if((int)(uiLength-uiTotal)<iBufSize) { iSize=uiLength-uiTotal; } intiCount=0; while(iCount<iSize) { iNumByte=servSock.Receive(pBuf,iSize-iCount); iCount+=iNumByte; recvFile.Write(pBuf,iNumByte); } uiTotal+=iCount; } recvFile.Close(); servSock.Close(); charext[10]; CStringtmpExt; _splitpath(recvPathName,NULL,NULL,NULL,ext); tmpExt=ext; if(".bmp"==tmpExt||".pcx"==tmpExt||".tiff"==tmpExt||".gif"==tmpExt||".jpg"==tmpExt||".jpeg"==tmpExt||".tga"==tmpExt||".exif"==tmpExt||".fpx"==tmpExt) { ShellExecute(NULL,"open",recvPathName,NULL,NULL,SW_SHOWNORMAL); } } } return0;}發(fā)送文獻(xiàn)按鈕:voidCmyFileTransferDlg::OnBnClickedBtnSend(){ CFileDialogopenDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "所有文獻(xiàn)(*.*)|*.*||"); if(IDOK==openDlg.DoModal()) { CStringopenFileName; openFileName=openDlg.GetFileName(); CSocketsendSock; sendSock.Create(); CStringIPstr; this->GetDlgItem(IDC_IPADDRESS1)->GetWindowText(IPstr); if(sendSock.Connect(IPstr,5000)==0) { return; } CFilesendFile; sendFile.Open(openDlg.GetPathName(),CFile::modeRead); sendSock.Send(openFileName,500); UINTuiLength; uiLength=sendFile.GetLength(); sendSock.Send(&uiLength,4); intiBufSize=1024*5; intiSize=iBufSize; LPBYTEpBuf=newBYTE[iBufSize]; intiNumByte; UINTuiTotal=0; while(uiTotal<uiLength) { if((int)(uiLength-uiTotal)<iBufSize) { iSize=uiLength-uiTotal; } iSize=sendFile.Read(pBuf,iSize); intiCount=0; while(iCount<iSize) { iNumByte=sendSock.Send(pBuf,iSize-iCount); iCount+=iNumByte; if(iCount<iSize) { sendFile.Seek(iSize-iCount,CFile::current); } } uiTotal+=iCount; } sendFile.Close(); sendSock.Close(); }運(yùn)行成果闡明:為了便于測(cè)試和觀測(cè),選擇127.0.0.1的發(fā)送IP地址進(jìn)行單機(jī)測(cè)試。圖3程序運(yùn)行啟動(dòng)界面雙擊打開(kāi)myFileTransfer.exe可執(zhí)行程序后的程序啟動(dòng)界面如圖3所示,然后在“對(duì)方IP地址”欄中輸入當(dāng)?shù)鼗厮偷刂?27.0.0.1準(zhǔn)備進(jìn)行發(fā)送文獻(xiàn)。圖4發(fā)送文獻(xiàn)選擇界面單擊“發(fā)送文獻(xiàn)”按鈕后,彈出如圖4所示的文獻(xiàn)選擇界面,選擇要發(fā)送的文獻(xiàn)并單擊“打開(kāi)”按鍵,確定選擇并將所選文獻(xiàn)發(fā)送給接受方。圖5接受方接受到文獻(xiàn)當(dāng)接受方接受到發(fā)送方傳來(lái)的文獻(xiàn)時(shí),接受方程序彈出如圖5所示的“保留”界面,提醒顧客接受文獻(xiàn)成功并進(jìn)行保留。圖6接受圖片自動(dòng)顯示當(dāng)接受方接受的文獻(xiàn)為圖片時(shí),程序調(diào)用操作系統(tǒng)默認(rèn)的圖片瀏覽器自動(dòng)打開(kāi)瀏覽接受到的圖片。當(dāng)接受的是非圖片文獻(xiàn)時(shí),程序則只是保留該文獻(xiàn),而不自動(dòng)打開(kāi)。試驗(yàn)感想通過(guò)獨(dú)立完畢了這次試驗(yàn)的所有內(nèi)容,我對(duì)網(wǎng)絡(luò)編程有了更全面、深刻地認(rèn)識(shí)和理解,尤其是對(duì)Windowssocket的掌握和編程應(yīng)用。由于我對(duì)MFC較為熟悉,因此在整個(gè)試驗(yàn)過(guò)程中,我采用MFC進(jìn)行編程來(lái)實(shí)現(xiàn)這個(gè)傳播文獻(xiàn)的程序。在程序?qū)崿F(xiàn)之前,我通過(guò)網(wǎng)絡(luò)上的基于socket網(wǎng)絡(luò)編程資料和老師課上講解的內(nèi)容,認(rèn)真全面地學(xué)習(xí)了Windowssocket的運(yùn)行機(jī)制和其在網(wǎng)絡(luò)編程上的應(yīng)用措施。在設(shè)計(jì)實(shí)現(xiàn)階段,我最先使用的是基礎(chǔ)SOCKET類(lèi),但在通信雙方傳送文獻(xiàn)的基本信息的詳細(xì)實(shí)現(xiàn)時(shí),碰到了不少的麻煩。例如SOCKET類(lèi)中的send措施的第二個(gè)參數(shù)類(lèi)型是“constchar*”用來(lái)指明一種寄存將要發(fā)送數(shù)據(jù)的緩沖區(qū),但在傳文獻(xiàn)信息長(zhǎng)度int類(lèi)型等非char*的變量時(shí)轉(zhuǎn)化很麻煩。于是,我查看MSDN文檔理解到MFC已為開(kāi)發(fā)者封裝了一種很簡(jiǎn)便的CSOCKET類(lèi)。應(yīng)用CSOCKET類(lèi)能很以便輕易地處理上面的問(wèn)題,并且實(shí)現(xiàn)網(wǎng)絡(luò)通信的流程也很清晰,最終我采用MFC封裝的CSOCKET類(lèi)編碼實(shí)現(xiàn)的這次試驗(yàn)內(nèi)容。在接受圖片自動(dòng)顯示的問(wèn)題上,我試驗(yàn)了兩種實(shí)現(xiàn)方式:用一種MFC中的承托圖片控件來(lái)顯示和調(diào)用操作系
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年全自動(dòng)變焦照相機(jī)項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2024年變頻器柜體系統(tǒng)項(xiàng)目資金籌措計(jì)劃書(shū)
- 2025年河南省三門(mén)峽市單招職業(yè)適應(yīng)性測(cè)試題庫(kù)匯編
- 2025年湖北省荊門(mén)市單招職業(yè)傾向性測(cè)試題庫(kù)匯編
- 2025年黑龍江商業(yè)職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)一套
- 兒童樂(lè)園裝修合同
- 2025年度安全培訓(xùn)與操作規(guī)范服務(wù)協(xié)議
- 2025年度員工勞動(dòng)合同終止及生活困難補(bǔ)助協(xié)議
- 2025陜西省安全員C證考試(專(zhuān)職安全員)題庫(kù)附答案
- 2025年度房屋贈(zèng)與及物業(yè)管理權(quán)轉(zhuǎn)移合同
- 固體廢棄物管理培訓(xùn)
- 硬件工程師職業(yè)生涯規(guī)劃
- 【高新技術(shù)企業(yè)所得稅稅務(wù)籌劃探析案例:以科大訊飛為例13000字(論文)】
- 提升管理層領(lǐng)導(dǎo)力的酒店管理培訓(xùn)課程
- 思維導(dǎo)圖在初中英語(yǔ)復(fù)習(xí)課中的應(yīng)用研究的中期報(bào)告
- 絕對(duì)干貨!國(guó)有企業(yè)總經(jīng)理辦公會(huì)決策事項(xiàng)及總經(jīng)理職責(zé)清單
- 高教社2023馬工程國(guó)際私法學(xué)教學(xué)課件u15
- 2022年春新教科版科學(xué)六年級(jí)下冊(cè)第4單元《物質(zhì)的變化》教案
- 蘇教版六年級(jí)下冊(cè)數(shù)學(xué) 用“轉(zhuǎn)化”的策略解決問(wèn)題 教案(教學(xué)設(shè)計(jì))
- 2-變電站安全工器具
- (完整word版)鋼琴五線譜(高音譜號(hào)、低音譜號(hào)、空白)可
評(píng)論
0/150
提交評(píng)論