《计算机视觉课程设计.docx》由会员分享,可在线阅读,更多相关《计算机视觉课程设计.docx(12页珍藏版)》请在第一文库网上搜索。
1、课程设计说明书此设计模板的红色部分都是你要修改的,小标题可以酌情增删这句话删掉学生信息课程设计信息课程名称计算机视觉课程设计课程设计题目智能相册课程设计时间8周小组情况一人一组指导教师董帅批改情况1 .课程设计内容32 .课程设计目的33 .背景知识34 .工具/准备工作35 .设计步骤与方法45.1. 步骤1:设计客户端与服务器端的通信协议45.1.1, 步骤1.1:客户端与服务器端的交互协议设计45.1.2, 步骤1.2:服务器端与客户端数据交互协议45.2. 步骤2:编写服务器端45.2.1, 步骤2.1:设计服务器的多用户响应45.2.2, 步骤22设计服务器服务线程55.3. 步骤3
2、:客户端设计75.4. 步骤3:设计程序的界面106 .软件测试截图117 .设计结果及分析128 .设计结论129 .问题及心得体会1210 .对本设计过程及方法、手段的改进建议1211 .任务分配错误!未定义书签。12 .参考文献1213 .课程设计评价(教师)12如果你修改了下面的标题,请更新目录的域,并删掉这句话课程设计报告1 .课程设计内容本课程设计的内容是设计一个基于QT的文件传输软件,支持多用户以及文件的断点续传。2 .课程设计目的考察自己对课程的掌握程度,以及自己实际的动手能力,编程能力。3 .背景知识TCP/IP协议的原理QT软件的应用4 .工具/准备工作硬件:安装有VS20
3、12的PC机一台软件:Windows10操作系统VS2012Opencv3.1.45 .设计步骤与方法5.1. 步骤1:设计客户端与服务器端的通信协议1、客户端与服务器端的请求协议2、服务器端与客户端数据交互协议5.1.1. 步骤1.1:客户端与服务器端的交互协议设计I帧总长|请求类型|参数|说明:请求下载列表I帧总长I列表IXI请求下载文件I帧总长I文件I文件路径|文件传输起始位|5.1.2. 步骤1.2:服务器端与客户端数据交互协议I帧总长I列表/文件I数据I52步骤2:编写服务器端521步骤2.1:设计服务器的多用户响应重写了QTCPSerVer的虚函数,实现了每当一个客户端访问服务器是
4、,开启一个线程响应客户端的请求。voidDown1oadServer:incomingConnection(inthand1e)Down1oadThread*Thread=newDown1oadThread(hand1e,this);Thread-start();)5.2.2.步骤2.2:设计服务器服务线程在这个函数中,线程主要负责两件事情,一、完成对客户端请求的解析;二、响应客户端请求。voidDown1oadThread:run()(qint64nextB1ockSize;QStringReqFi1eName;qint64ReqFiIeStartPos5BytesRemaining;QTc
5、pSocketToC1ient;ToC1ient.setSocketDescriptor(hande1);ToC1ient.waitForReadyRead();nextB1ockSize=0;QByteArrayOutBIock;QDataStreamout(&OutB1ock,QIODevice:WriteOn1y);out.setVersion(QDataStream:Qt_4_6);QDataStreamin(&ToC1ient);in.setVersion(QDataStream:Qt_4_6);if(nextB1ockSize=0)(if(ToC1ient.bytesAvai1ab
6、1e()sizeof(qint64)return;innextB1ockSize;Jif(ToC1ient.bytesAvai1ab1e()ReqType;switch(ReqType)/确定客户端的请求(caseReq_1ist:下载列表请求OutB1ock.c1ear();outqint64(0)qint64(0)seek(0);outReqFi1eName;inReqFi1eStartPos;printf(ReqFi1eName+,+QString-number(ReqFi1eStartPos)+,n,);QFi1e*ReqFi1e=newQFi1e(ReqFi1eName);ReqFi
7、1e-open(QIODevice:ReadOn1y);ReqFi1e-seek(ReqFi1eStartPos);BytesRemaining=ReqFi1e-size();OutB1ock.c1ear();outqint64(0)qint64(2)seek(0);outatEnd()Printf(BytesRemaining:+QString:iWmber(ByteSRemaining)+n);QByteArray_data,fi1edat;QDataStreamFi1eB1ock(&_data,QIODevice:WriteOn1y);Fi1eB1ock,setVersion(QData
8、S1ream:Qt_4_6);fiIedat=ReqFi1e-read(Fi1eB1ockSize);Fi1eB1ockqint64(0)qint64(1)seek(0);Fi1eB1ockseek(0);outqint64(ReqB1ock.size()-sizeof(qint64);break;caseDown1oad_Fi1e:outqint64(0)qint64(Down1oad-Fi1e)Fi1eNameseek(0);outopen(Q1ODevice:Writeon1yIQ1ODevice:Append);break;defau1t:break;);ToServer-write(
9、ReqB1ock);)等待服务器传来的数据voidMyC1ient:getData()(qint64FrameType;QDataStreamin(ToServer);in.setVersion(QDataStream:Qt_4_6);foreverprintf(QString:number(ToServer-bytesAvai1ab1e()+nn);if(nextB1ockSize=O)if(ToServer-bytesAvai1ab1e()nextB1ockSize;printf(,size+QStringnumber(nextB1ockSize)+,n);)if(FiextB1ockSize=qint64(0xFFFFFFFF)(printf(ubreak2nH);QMessageBoxmsgBox;msgBox.Set1con(QMessageBoxizInfbrmation);msgBox.setText(Transmisiondone!1);msgBox.exec();nextB1ockSize=O;break;if(ToServer-bytesAvai1ab1e()FrameType;printf(,typez,+QStngnumber(FrameT