版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
課程設(shè)計說明書
此設(shè)計模板的紅色部分都是你要修改的,小標(biāo)題可以酌情增刪
這句話刪掉
學(xué)生信息
課程設(shè)計信息
課程名稱計算機(jī)視覺課程設(shè)計
課程設(shè)計題目智能相冊
課程設(shè)計時間「8周
小組情況一人一組指導(dǎo)教師董帥
批改情況
目錄
1.課程設(shè)計內(nèi)容.....................................................3
2.課程設(shè)計目的.....................................................3
3.背景知識.........................................................3
4.工具/準(zhǔn)備工作...................................................3
5.設(shè)計步驟與方法..................................................4
5.1.步驟1:設(shè)計客戶端與服務(wù)器端的通信協(xié)議...............................4
5.1.1.步驟1.1:客戶端與服務(wù)器端的交互協(xié)議設(shè)計.............................4
5.1.2.步驟1.2:服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議................................4
5.2.步驟2:編寫服務(wù)器端...................................................4
5.2.1.步驟2.1:設(shè)計服務(wù)器的多用戶響應(yīng)....................................4
5.2.2.步驟2.2:設(shè)計服務(wù)器服務(wù)線程.........................................5
5.3.步驟3:客戶端設(shè)計.....................................................7
5.4.步驟3:設(shè)計程序的界面................................................10
6.軟件測試截圖....................................................11
7.設(shè)計結(jié)果及分析.................................................12
8.設(shè)計結(jié)論........................................................12
9.問題及心得體會.................................................12
10.對本設(shè)計過程及方法、手段的改進(jìn)建議.............................12
11.任務(wù)分配........................................錯誤!未定義書簽。
12.參考文獻(xiàn)........................................................12
13.課程設(shè)計評價(教師)..............................................12
如果你修改了下面的標(biāo)題,請更新目錄的域,并刪掉這句話
課程設(shè)計報告
1.課程設(shè)計內(nèi)容
本課程設(shè)計的內(nèi)容是設(shè)計一個基于QT的文件傳輸軟件,支持多用戶以及文
件的斷點續(xù)傳。
2.課程設(shè)計目的
考察自己對課程的掌握程度,以及自己實際的動手能力,編程能力。
3.背景知識
TCP/IP協(xié)議的原理
QT軟件的應(yīng)用
4.工具/準(zhǔn)備工作
硬件:
安裝有VS2012的PC機(jī)一臺
軟件:
Windows10操作系統(tǒng)
VS2012
Opencv3.1.4
5.設(shè)計步驟與方法
5.1.步驟1:設(shè)計客戶端與服務(wù)器端的通信協(xié)議
1、客戶端與服務(wù)器端的請求協(xié)議
2、服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議
5?1.1.步驟客戶端與服務(wù)器端的交互協(xié)議設(shè)計
幀總長|請求類型|參數(shù)…|
說明:
請求下載列表
幀總長I列表Ix|
請求下載文件
幀總長|文件|文件路徑|文件傳輸起始位|
5.1.2.步驟1.2:服務(wù)器端與客戶端數(shù)據(jù)交互協(xié)議
I幀總長I列表/文件I數(shù)據(jù)I
52步驟2:編寫服務(wù)器端
521.步驟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();
1
5.2.2.步驟2.2:設(shè)計服務(wù)器服務(wù)線程
在這個函數(shù)中,線程主要負(fù)責(zé)兩件事情,一、完成對客戶端請求的解析;二、
響應(yī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)〃確定客戶端的請求
(
caseReq_Lisl:〃下載列表請求
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:〃文件傳輸請求
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è)計
功能實現(xiàn):1、向服務(wù)器端發(fā)送請求
2、等待接收服務(wù)器傳來的數(shù)據(jù)
具體實現(xiàn)代買如下
向服務(wù)器端發(fā)送請求:
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ù)潛傳來的數(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è)計程序的界面
1.利用QTCreator為程序設(shè)計一個良好的用戶交互界面
客戶端服務(wù)器端
6.軟件測試截圖
設(shè)置下載列表獲取下載列表下載中
QFileTransport
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于BIM的項目溝通協(xié)同平臺方案
- 施工作業(yè)安全標(biāo)識設(shè)置方案
- 危險作業(yè)審批與監(jiān)控方案
- 燃?xì)夤艿啦牧线x擇方案
- 高中階段學(xué)生輔導(dǎo)與提升計劃方案
- 安全員A證考試考前沖刺練習(xí)試題必考附答案詳解
- 安全員A證考試能力提升試題打印附參考答案詳解(能力提升)
- 安全員A證考試高分題庫及答案詳解(歷年真題)
- 安全員A證考試從業(yè)資格考試真題帶答案詳解
- 2025年物聯(lián)網(wǎng)平臺開發(fā)模擬試題及答案解析
- 2026貴州省省、市兩級機(jī)關(guān)遴選公務(wù)員357人考試備考題庫及答案解析
- 兒童心律失常診療指南(2025年版)
- 北京通州產(chǎn)業(yè)服務(wù)有限公司招聘備考題庫必考題
- 2026年基金從業(yè)資格證考試題庫500道含答案(完整版)
- 氣體滅火系統(tǒng)維護(hù)與保養(yǎng)方案
- GB/T 10922-202555°非密封管螺紋量規(guī)
- ESD護(hù)理教學(xué)查房
- 內(nèi)窺鏡護(hù)理不良事件分析與防范措施
- 2025年《電信業(yè)務(wù)投訴處理》知識考試題庫及答案解析
- 82-2手榴彈使用課件
- 道路清掃保潔服務(wù)投標(biāo)方案
評論
0/150
提交評論