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

下載本文檔

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

文檔簡(jiǎn)介

課程設(shè)計(jì)說(shuō)明書(shū)

此設(shè)計(jì)模板的紅色部分都是你要修改的,小標(biāo)題可以酌情增刪

這句話刪掉

學(xué)生信息

課程設(shè)計(jì)信息

課程名稱計(jì)算機(jī)視覺(jué)課程設(shè)計(jì)

課程設(shè)計(jì)題目智能相冊(cè)

課程設(shè)計(jì)時(shí)間「8周

小組情況一人一組指導(dǎo)教師董帥

批改情況

目錄

1.課程設(shè)計(jì)內(nèi)容.....................................................3

2.課程設(shè)計(jì)目的.....................................................3

3.背景知識(shí).........................................................3

4.工具/準(zhǔn)備工作...................................................3

5.設(shè)計(jì)步驟與方法..................................................4

5.1.步驟1:設(shè)計(jì)客戶端與服務(wù)器端的通信協(xié)議...............................4

5.1.1.步驟1.1:客戶端與服務(wù)器端的交互協(xié)議設(shè)計(jì).............................4

5.1.2.步驟1.2:服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議................................4

5.2.步驟2:編寫(xiě)服務(wù)器端...................................................4

5.2.1.步驟2.1:設(shè)計(jì)服務(wù)器的多用戶響應(yīng)....................................4

5.2.2.步驟2.2:設(shè)計(jì)服務(wù)器服務(wù)線程.........................................5

5.3.步驟3:客戶端設(shè)計(jì).....................................................7

5.4.步驟3:設(shè)計(jì)程序的界面................................................10

6.軟件測(cè)試截圖....................................................11

7.設(shè)計(jì)結(jié)果及分析.................................................12

8.設(shè)計(jì)結(jié)論........................................................12

9.問(wèn)題及心得體會(huì).................................................12

10.對(duì)本設(shè)計(jì)過(guò)程及方法、手段的改進(jìn)建議.............................12

11.任務(wù)分配........................................錯(cuò)誤!未定義書(shū)簽。

12.參考文獻(xiàn)........................................................12

13.課程設(shè)計(jì)評(píng)價(jià)(教師)..............................................12

如果你修改了下面的標(biāo)題,請(qǐng)更新目錄的域,并刪掉這句話

課程設(shè)計(jì)報(bào)告

1.課程設(shè)計(jì)內(nèi)容

本課程設(shè)計(jì)的內(nèi)容是設(shè)計(jì)一個(gè)基于QT的文件傳輸軟件,支持多用戶以及文

件的斷點(diǎn)續(xù)傳。

2.課程設(shè)計(jì)目的

考察自己對(duì)課程的掌握程度,以及自己實(shí)際的動(dòng)手能力,編程能力。

3.背景知識(shí)

TCP/IP協(xié)議的原理

QT軟件的應(yīng)用

4.工具/準(zhǔn)備工作

硬件:

安裝有VS2012的PC機(jī)一臺(tái)

軟件:

Windows10操作系統(tǒng)

VS2012

Opencv3.1.4

5.設(shè)計(jì)步驟與方法

5.1.步驟1:設(shè)計(jì)客戶端與服務(wù)器端的通信協(xié)議

1、客戶端與服務(wù)器端的請(qǐng)求協(xié)議

2、服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議

5?1.1.步驟客戶端與服務(wù)器端的交互協(xié)議設(shè)計(jì)

幀總長(zhǎng)|請(qǐng)求類型|參數(shù)…|

說(shuō)明:

請(qǐng)求下載列表

幀總長(zhǎng)I列表Ix|

請(qǐng)求下載文件

幀總長(zhǎng)|文件|文件路徑|文件傳輸起始位|

5.1.2.步驟1.2:服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議

I幀總長(zhǎng)I列表/文件I數(shù)據(jù)I

52步驟2:編寫(xiě)服務(wù)器端

521.步驟2.1:設(shè)計(jì)服務(wù)器的多用戶響應(yīng)

重寫(xiě)了QTcpServer的虛函數(shù),實(shí)現(xiàn)了每當(dāng)一個(gè)客戶端訪問(wèn)服務(wù)器是,開(kāi)啟一

個(gè)線程響應(yīng)客戶端的請(qǐng)求。

voidDownloadServer::incomingConnection(inthandle)

(

DownloadThread"Thread=newDownloadThread(handle,this);

Thread->start();

1

5.2.2.步驟2.2:設(shè)計(jì)服務(wù)器服務(wù)線程

在這個(gè)函數(shù)中,線程主要負(fù)責(zé)兩件事情,一、完成對(duì)客戶端請(qǐng)求的解析;二、

響應(yīng)客戶端請(qǐng)求。

voidDownloadThread::run()

(

qinl64nexlBlockSize;

QStringReqFileName;

qint64ReqFiIeStartPos,BytesRemaining;

QTcpSocketToClient;

ToClient.setSocketDescriptor(handel);

ToClient.wailForReadyReadO;

nextBlockSize=0;

QByteArrayOutBlock;

QDataStrcamout(&OutBlock,QIODevice::WriteOnly);

out.selVersion(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.bytesAvaiIable()<nextBlockSize)

return;

qint64RcqTypc;

in?ReqType;

switch(ReqType)〃確定客戶端的請(qǐng)求

(

caseReq_Lisl:〃下載列表請(qǐng)求

OutBlock.clear();

out?qint64(0)?qint64(0)?Server_List;

out.device()->seek(0);

out?qint64(OutBlock.sizc()-sizeof(qint64));

ToClient.write(OutBlock);

ToClient.fiush();

ToClient.waitForBytesWritten();

in?qint64(0xFFFFFFFF);

ToClicnt.flush();

ToClient.waitForBytesWrilten();

break;

caseReq_File:〃文件傳輸請(qǐng)求

in?ReqFileName;

in?ReqFileSlartPos;

printf(ReqFileName+":"+QString::number(ReqFileS(artPos)+"\n");

QFile*ReqFile=newQFile(ReqFileName);

ReqFile->open(QIODevice::ReadOnly);

RcqFile->seek(RcqFileStartPos);

BytesRemaining=ReqFile->size();

OutBlock.clear();

out?qint64(0)?qint64(2)?BytesRemaining;

out.dcvicc()->scck(0);

out?qint64(OutBlock.size()-sizeof(qint64));

ToClient.write(OutBlock);

ToClient.waitForBytesWritten();

whilc(!RcqFilc->atEnd())

(

printf(nBytesRemaining:"+QString::number(BytesRemaining)+"\n");

QByteArray_data,filedat;

QDataStreamFileBlock(&_data,QlODevice::WriteOnly);

FileBlock.setVersion(QDataStream::Qt_4_6);

filcdat=RcqFilc->read(FilcBlockSize);

FileBlock?qint64(0)?qint64(1)?filedat;

FileBlock.device()->seek(0);

FileBlock?qint64(_data.size()-sizeof(qint64));

ToClient.writeQdata);

ToClicnt.flush();

ToClient.waitForBytesWritten();

BytesRemaining-=filedat.size();

)

in?qint64(0xFFFFFFFF);

ToClicnt.flush();

ToClient.waitForBytesWrilten();

break;

);

nextBlockSize=0;

ToClient.disconnectFromHost();

ToClient.close();

5.3.步驟3:客戶端設(shè)計(jì)

功能實(shí)現(xiàn):1、向服務(wù)器端發(fā)送請(qǐng)求

2、等待接收服務(wù)器傳來(lái)的數(shù)據(jù)

具體實(shí)現(xiàn)代買如下

向服務(wù)器端發(fā)送請(qǐng)求:

voidMyClicnt::ScndRcquest(shortOpt)

(

ToServer=newQTcpSocket(this);

SocketState=false;

connect(ToServer,SIGNAL(connected()),this,SLOT(isConnectcd()));

connect(ToServer,SIGNAL(readyRead()),this,SLOT(getData()));

connect(ToServer,SIGNAL(disconnected()),ToServer,SLOT(deleleLater()));

ConnectToServer(HostlP);

QByteArrayReqBlock;

QDataStreamout(&ReqBlock,QIODevice::WriteOnly);

out.sctVcrsion(QDataStrcam::Qt_4_6);

switch(Opt)

(

caseDownIoad_List:

out?qint64(0)?qint64(Down!oad_List);

out.dcvicc()->scck(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=new

QFile(FileName.right(FileName.size()-FileName.lastIndexOf(7,)-l));

Target_File->open(QlODevice::WriteOnly|QlODcvice::Append);

break;

default:

break;

);

ToServer->write(ReqBlock);

)

等待服務(wù)潛傳來(lái)的數(shù)據(jù)

voidMyClicnt::gctData()

{

qint64FrameType;

QDataStreamin(ToServer);

in.setVersion(QDataStream::Qt_4_6);

forever

printf(QString::number(ToServer->bytesAvailable())+"\nn);

if(nextBlockSize==0)

if(ToServer->bytesAvailable()<sizeof(qint64))

(

printfC'breaknn");

break;

}

in?nextBlockSize;

printf(,'size:"+QString::number(nextBlockSize)+',\nM);

)

if(nextBlockSize==qint64(0xFFFFFFFF)i

(

printf(nbreak2\n");

QMcssagcBoxmsgBox;

msgBox.setIcon(QMessageBox::Informalion);

msgBox.setText("Transmisiondone!");

msgBox.exec();

nextBlockSize=0;

break;

)

if(ToServer->bytesAvailable()<nextBlockSize)

{

printf("break3\n");

break;

1

in?FrameType;

printf(',type:"+QString::number(FrameType)+',\nn);

if(Is_List_Itcm==FrameTypc)

(

in?Client_List;

if(Client_List.size()==0)

(

)

else

emitListUpdataed();

)

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(Targct_Filc->sizc()==FilcSizc)

(

Target_File_Info->remove();

Target_File->close();

I

1

elseif(Is_File_Size==FrameType)

(

in?FileSize;

TotalFileSize=FileSize;

printf(,,FileSize:,'+QString::number(FileSize)+,,\nH);

}

nextBlockSize=0;

)

)

54步驟3:設(shè)計(jì)程序的界面

1.利用QTCreator為程序設(shè)計(jì)一個(gè)良好的用戶交互界面

客戶端服務(wù)器端

6.軟件測(cè)試截圖

設(shè)置下載列表獲取下載列表下載中

QFileTransport

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論