![文件傳輸程序設(shè)計講解_第1頁](http://file4.renrendoc.com/view/c1027530a0a550eb9d78843b859abeeb/c1027530a0a550eb9d78843b859abeeb1.gif)
![文件傳輸程序設(shè)計講解_第2頁](http://file4.renrendoc.com/view/c1027530a0a550eb9d78843b859abeeb/c1027530a0a550eb9d78843b859abeeb2.gif)
![文件傳輸程序設(shè)計講解_第3頁](http://file4.renrendoc.com/view/c1027530a0a550eb9d78843b859abeeb/c1027530a0a550eb9d78843b859abeeb3.gif)
![文件傳輸程序設(shè)計講解_第4頁](http://file4.renrendoc.com/view/c1027530a0a550eb9d78843b859abeeb/c1027530a0a550eb9d78843b859abeeb4.gif)
![文件傳輸程序設(shè)計講解_第5頁](http://file4.renrendoc.com/view/c1027530a0a550eb9d78843b859abeeb/c1027530a0a550eb9d78843b859abeeb5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
文件傳輸程序設(shè)計講解Internet網(wǎng)絡(luò)程序設(shè)計實驗報告基于Socket的文件傳輸程序設(shè)計姓名:莫敵班級:軟件0904學(xué)號:U200917895指導(dǎo)老師:陸永忠2012.03.31文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第1頁。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第1頁。目錄1 實驗?zāi)康募耙?21.1 實驗?zāi)康?21.2 實驗要求 22 實驗環(huán)境 33 實驗程序設(shè)計 33.1 設(shè)計思想 33.2 程序設(shè)計流程框圖 43.3 詳細(xì)設(shè)計 53.3.1 界面設(shè)計 53.3.2 主要功能實現(xiàn) 63.4 運行結(jié)果 94 實驗感想 11文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第2頁。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第2頁。實驗?zāi)康募耙髮嶒災(zāi)康氖煜ocket的通訊機(jī)制,了解網(wǎng)絡(luò)程序的設(shè)計方法。重點掌握基于TCP協(xié)議的Socket網(wǎng)絡(luò)編程。實驗要求設(shè)計界面,在服務(wù)器端和客戶端傳輸圖片和文件。如果是圖片請顯示該圖片,如果是其他文件,則保存。實驗環(huán)境編譯環(huán)境:Windows7+VisualStudio2010使用MFC編寫。運行環(huán)境:Windows7操作系統(tǒng)。實驗程序設(shè)計設(shè)計思想根據(jù)實驗的要求:在服務(wù)器和客戶端之間傳輸文件和圖片,則需要程序提供一種可靠的網(wǎng)絡(luò)傳輸服務(wù)來保證文件在傳輸過程中無丟失、損壞。在分析了傳輸層協(xié)議TCP協(xié)議和UDP協(xié)議后,了解到TCP協(xié)議提供的是一種面向連接的、可靠的字節(jié)流服務(wù),而UDP協(xié)議提供的是一種無連接的、不可靠的數(shù)據(jù)報服務(wù)。由于程序的需求,即必須保證文件傳輸?shù)目煽啃?,于是,我采用基于TCP協(xié)議的Windowssockets來設(shè)計實現(xiàn)本實驗。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第3頁。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第3頁。程序設(shè)計流程框圖創(chuàng)建新的通信端點創(chuàng)建新的通信端點將一個本地地址關(guān)聯(lián)到套接字上宣布接受連接,給出監(jiān)聽隊列大小阻塞,直到有客戶企圖連接發(fā)送/接受數(shù)據(jù)釋放連接結(jié)束開始主動嘗試建立一個連接創(chuàng)建新的通信端點發(fā)送/接受數(shù)據(jù)釋放連接結(jié)束開始服務(wù)器端客戶端圖1程序設(shè)計流程框圖文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第4頁。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第4頁。詳細(xì)設(shè)計基于TCP的socket編程流程:服務(wù)器端:創(chuàng)建套接字(socket)。將套接字綁定到一個本地地址和端口上(bind)。將套接字設(shè)為監(jiān)聽模式,準(zhǔn)備接收客戶端請求(listen)。等待客戶端請求到來。當(dāng)請求到來后,接收連接請求,返回一個新的對應(yīng)于此次連接的套件字(accept)。用返回的套接字和客戶端進(jìn)行通信(send/recv)。返回,等待另一客戶端請求。關(guān)閉套接字??蛻舳耍簞?chuàng)建套接字(socket)。向服務(wù)器發(fā)出連接請求(connect)。和服務(wù)器端進(jìn)行通信(send/recv)。關(guān)閉套接字。界面設(shè)計文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第5頁。圖2程序界面文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第5頁。由于程序?qū)崿F(xiàn)的功能單一簡單,所以我的程序界面設(shè)計如圖2所示。程序由兩個用戶可操作的控件組成:IP地址控件,用戶輸入將要接收文件的接收方IP地址;“發(fā)送文件”按鈕,單擊選擇用戶要發(fā)送的文件并發(fā)送所選文件數(shù)據(jù)。主要功能實現(xiàn)套接字庫加載: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, "所有文件(*.*)|*.*||"); 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;文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第6頁。 }文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第6頁。 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ā)送文件按鈕:voidCmyFileTransferDlg::OnBnClickedBtnSend(){ CFileDialogopenDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "所有文件(*.*)|*.*||"); 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; }文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第7頁。 CFilesendFile;文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第7頁。 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(); }文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第8頁。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第8頁。運行結(jié)果說明:為了便于測試和觀察,選擇127.0.0.1的發(fā)送IP地址進(jìn)行單機(jī)測試。圖3程序運行啟動界面雙擊打開myFileTransfer.exe可執(zhí)行程序后的程序啟動界面如圖3所示,然后在“對方IP地址”欄中輸入本地回送地址127.0.0.1準(zhǔn)備進(jìn)行發(fā)送文件。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第9頁。圖4發(fā)送文件選擇界面文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第9頁。單擊“發(fā)送文件”按鈕后,彈出如圖4所示的文件選擇界面,選擇要發(fā)送的文件并單擊“打開”按鍵,確定選擇并將所選文件發(fā)送給接收方。圖5接受方接收到文件當(dāng)接收方接收到發(fā)送方傳來的文件時,接收方程序彈出如圖5所示的“保存”界面,提示用戶接收文件成功并進(jìn)行保存。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第10頁。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第10頁。圖6接收圖片自動顯示當(dāng)接收方接收的文件為圖片時,程序調(diào)用操作系統(tǒng)默認(rèn)的圖片瀏覽器自動打開瀏覽接收到的圖片。當(dāng)接收的是非圖片文件時,程序則只是保存該文件,而不自動打開。實驗感想通過獨立完成了這次實驗的全部內(nèi)容,我對網(wǎng)絡(luò)編程有了更全面、深刻地認(rèn)識和了解,尤其是對Windowssocket的掌握和編程應(yīng)用。由于我對MFC較為熟悉,所以在整個實驗過程中,我采用MFC進(jìn)行編程來實現(xiàn)這個傳輸文件的程序。在程序?qū)崿F(xiàn)之前,我通過網(wǎng)絡(luò)上的基于socket網(wǎng)絡(luò)編程資料和老師課上講解的內(nèi)容,認(rèn)真全面地學(xué)習(xí)了Windowssocket的運行機(jī)制和其在網(wǎng)絡(luò)編程上的應(yīng)用方法。文件傳輸程序設(shè)計講解全文共12頁,當(dāng)前為第11頁。在設(shè)計實現(xiàn)階段,我最先使用
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育培訓(xùn)合作委托居間合同
- 品牌營銷推廣策略指南
- 技術(shù)產(chǎn)品銷售合同
- 華為勞動合同管理制度
- 遺傳基因技術(shù)服務(wù)合同
- 外貿(mào)實務(wù)操作作業(yè)指導(dǎo)書
- 倉儲配送合同
- 智能工廠建設(shè)與運營作業(yè)指導(dǎo)書
- 2025年來賓貨運從業(yè)資格證模擬考試題庫
- 2025年陜西貨運從業(yè)資格考試模擬考試題庫及答案大全
- 小學(xué)校本課程教材《趣味數(shù)學(xué)》
- 干細(xì)胞療法推廣方案
- (2024年)電工安全培訓(xùn)(新編)課件
- mil-std-1916抽樣標(biāo)準(zhǔn)(中文版)
- 城鄉(xiāng)環(huán)衛(wèi)一體化內(nèi)部管理制度
- 廣匯煤炭清潔煉化有限責(zé)任公司1000萬噸年煤炭分級提質(zhì)綜合利用項目變更環(huán)境影響報告書
- 小學(xué)數(shù)學(xué)六年級解方程練習(xí)300題及答案
- 大數(shù)據(jù)在化工行業(yè)中的應(yīng)用與創(chuàng)新
- 光伏十林業(yè)可行性報告
- 小學(xué)綜合實踐《我做環(huán)保宣傳員 保護(hù)環(huán)境人人有責(zé)》
- 鋼煤斗內(nèi)襯不銹鋼板施工工法
評論
0/150
提交評論