計算機視覺課程設(shè)計_第1頁
計算機視覺課程設(shè)計_第2頁
計算機視覺課程設(shè)計_第3頁
計算機視覺課程設(shè)計_第4頁
計算機視覺課程設(shè)計_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第2頁共12頁課程設(shè)計說明書此設(shè)計模板的紅色部分都是你要修改的,小標(biāo)題可以酌情增刪這句話刪掉學(xué)生信息課程設(shè)計信息課程名稱計算機視覺課程設(shè)計課程設(shè)計題目智能相冊課程設(shè)計時間1~8周小組情況一人一組指導(dǎo)教師董帥批改情況目錄TOC\o"1-4"\h\z\u1. 課程設(shè)計內(nèi)容 32. 課程設(shè)計目的 33. 背景知識 34. 工具/準(zhǔn)備工作 35. 設(shè)計步驟與方法 45.1. 步驟1:設(shè)計客戶端與服務(wù)器端的通信協(xié)議 45.1.1. 步驟1.1:客戶端與服務(wù)器端的交互協(xié)議設(shè)計 45.1.2. 步驟1.2:服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議 45.2. 步驟2:編寫服務(wù)器端 45.2.1. 步驟2.1:設(shè)計服務(wù)器的多用戶響應(yīng) 45.2.2. 步驟2.2:設(shè)計服務(wù)器服務(wù)線程 55.3. 步驟3:客戶端設(shè)計 75.4. 步驟3:設(shè)計程序的界面 106. 軟件測試截圖 117. 設(shè)計結(jié)果及分析 118. 設(shè)計結(jié)論 129. 問題及心得體會 1210. 對本設(shè)計過程及方法、手段的改進建議 1211. 任務(wù)分配 1212. 參考文獻 1213. 課程設(shè)計評價(教師) 12如果你修改了下面的標(biāo)題,請更新目錄的域,并刪掉這句話

課程設(shè)計報告課程設(shè)計內(nèi)容本課程設(shè)計的內(nèi)容是設(shè)計一個基于QT的文件傳輸軟件,支持多用戶以及文件的斷點續(xù)傳。課程設(shè)計目的考察自己對課程的掌握程度,以及自己實際的動手能力,編程能力。背景知識TCP/IP協(xié)議的原理QT軟件的應(yīng)用工具/準(zhǔn)備工作硬件:安裝有VS2012的PC機一臺軟件: Windows10操作系統(tǒng) VS2012 Opencv3.1.4設(shè)計步驟與方法步驟1:設(shè)計客戶端與服務(wù)器端的通信協(xié)議1、客戶端與服務(wù)器端的請求協(xié)議2、服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議步驟1.1:客戶端與服務(wù)器端的交互協(xié)議設(shè)計|幀總長|請求類型|參數(shù)…|說明:請求下載列表|幀總長|列表|X|請求下載文件|幀總長|文件|文件路徑|文件傳輸起始位|步驟1.2:服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議|幀總長|列表/文件|數(shù)據(jù)|步驟2:編寫服務(wù)器端步驟2.1:設(shè)計服務(wù)器的多用戶響應(yīng)重寫了QTcpServer的虛函數(shù),實現(xiàn)了每當(dāng)一個客戶端訪問服務(wù)器是,開啟一個線程響應(yīng)客戶端的請求。voidDownloadServer::incomingConnection(inthandle){DownloadThread*Thread=newDownloadThread(handle,this);Thread->start();}步驟2.2:設(shè)計服務(wù)器服務(wù)線程在這個函數(shù)中,線程主要負(fù)責(zé)兩件事情,一、完成對客戶端 請求的解析;二、響應(yīng)客戶端請求。voidDownloadThread::run(){qint64nextBlockSize;QStringReqFileName;qint64ReqFileStartPos,BytesRemaining;QTcpSocketToClient;ToClient.setSocketDescriptor(handel);ToClient.waitForReadyRead();nextBlockSize=0;QByteArrayOutBlock;QDataStreamout(&OutBlock,QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_4_6);QDataStreamin(&ToClient);in.setVersion(QDataStream::Qt_4_6);if(nextBlockSize==0){if(ToClient.bytesAvailable()<sizeof(qint64))return;in>>nextBlockSize;}if(ToClient.bytesAvailable()<nextBlockSize)return;qint64ReqType;in>>ReqType;switch(ReqType)//確定客戶端的請求{caseReq_List://下載列表請求OutBlock.clear();out<<qint64(0)<<qint64(0)<<Server_List;out.device()->seek(0);out<<qint64(OutBlock.size()-sizeof(qint64));ToClient.write(OutBlock);ToClient.flush();ToClient.waitForBytesWritten();in<<qint64(0xFFFFFFFF);ToClient.flush();ToClient.waitForBytesWritten();break;caseReq_File://文件傳輸請求in>>ReqFileName;in>>ReqFileStartPos;printf(ReqFileName+":"+QString::number(ReqFileStartPos)+"\n");QFile*ReqFile=newQFile(ReqFileName);ReqFile->open(QIODevice::ReadOnly);ReqFile->seek(ReqFileStartPos);BytesRemaining=ReqFile->size();OutBlock.clear();out<<qint64(0)<<qint64(2)<<BytesRemaining;out.device()->seek(0);out<<qint64(OutBlock.size()-sizeof(qint64));ToClient.write(OutBlock);ToClient.waitForBytesWritten();while(!ReqFile->atEnd()){printf("BytesRemaining:"+QString::number(BytesRemaining)+"\n");QByteArray_data,filedat;QDataStreamFileBlock(&_data,QIODevice::WriteOnly);FileBlock.setVersion(QDataStream::Qt_4_6);filedat=ReqFile->read(FileBlockSize);FileBlock<<qint64(0)<<qint64(1)<<filedat;FileBlock.device()->seek(0);FileBlock<<qint64(_data.size()-sizeof(qint64));ToClient.write(_data);ToClient.flush();ToClient.waitForBytesWritten();BytesRemaining-=filedat.size();}in<<qint64(0xFFFFFFFF);ToClient.flush();ToClient.waitForBytesWritten();break;};nextBlockSize=0;ToClient.disconnectFromHost();ToClient.close();}步驟3:客戶端設(shè)計功能實現(xiàn):1、向服務(wù)器端發(fā)送請求 2、等待接收服務(wù)器傳來的數(shù)據(jù)具體實現(xiàn)代買如下向服務(wù)器端發(fā)送請求:voidMyClient::SendRequest(shortOpt){ToServer=newQTcpSocket(this);SocketState=false;connect(ToServer,SIGNAL(connected()),this,SLOT(isConnected()));connect(ToServer,SIGNAL(readyRead()),this,SLOT(getData()));connect(ToServer,SIGNAL(disconnected()),ToServer,SLOT(deleteLater()));ConnectToServer(HostIP);QByteArrayReqBlock;QDataStreamout(&ReqBlock,QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_4_6);switch(Opt){caseDownload_List:out<<qint64(0)<<qint64(Download_List);out.device()->seek(0);out<<qint64(ReqBlock.size()-sizeof(qint64));break;caseDownload_File:out<<qint64(0)<<qint64(Download_File)<<FileName<<FileStartPos;out.device()->seek(0);out<<qint64(ReqBlock.size()-sizeof(qint64));Target_File=newQFile(FileName.right(FileName.size()-FileName.lastIndexOf('/')-1));Target_File->open(QIODevice::WriteOnly|QIODevice::Append);break;default:break;};ToServer->write(ReqBlock);}等待服務(wù)器傳來的數(shù)據(jù)voidMyClient::getData(){qint64FrameType;QDataStreamin(ToServer);in.setVersion(QDataStream::Qt_4_6);forever{printf(QString::number(ToServer->bytesAvailable())+"\n");if(nextBlockSize==0){if(ToServer->bytesAvailable()<sizeof(qint64)){printf("break1\n");break;}in>>nextBlockSize;printf("size:"+QString::number(nextBlockSize)+"\n");}if(nextBlockSize==qint64(0xFFFFFFFF)){printf("break2\n");QMessageBoxmsgBox;msgBox.setIcon(QMessageBox::Information);msgBox.setText("Transmisiondone!");msgBox.exec();nextBlockSize=0;break;}if(ToServer->bytesAvailable()<nextBlockSize){printf("break3\n");break;}in>>FrameType;printf("type:"+QString::number(FrameType)+"\n");if(Is_List_Item==FrameType){in>>Client_List;if(Client_List.size()==0){}elseemitListUpdataed();}elseif(Is_File_Data==FrameType){printf("writeData\n");QByteArrayFileData;in>>FileData;Target_File->write(FileData);Target_File_Info->open(QIODevice::WriteOnly);Target_File_Info->write(QString::number(Target_File->size()));Target_File_Info->close();NowFileSize=Target_File->size();//emitProgressBarUpdata(Target_File->size(),FileSize);if(Target_File->size()==FileSize){Target_File_Info->remove();Target_File->close();}}elseif(Is_File_Size==FrameType){in>>FileSize;TotalFileSize=FileSize;printf("FileSize:"+QString::numb

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論