计算机视觉课程设计_第1页
计算机视觉课程设计_第2页
计算机视觉课程设计_第3页
计算机视觉课程设计_第4页
计算机视觉课程设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2页共12页课程设计说明书此设计模板的红色部分都是你要修改的,小标题可以酌情增删这句话删掉学生信息课程设计信息课程名称计算机视觉课程设计课程设计题目智能相册课程设计时间1~8周小组情况一人一组指导教师董帅批改情况目录TOC\o"1-4"\h\z\u1. 课程设计内容 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. 步骤2.2:设计服务器服务线程 55.3. 步骤3:客户端设计 75.4. 步骤3:设计程序的界面 106. 软件测试截图 117. 设计结果及分析 118. 设计结论 129. 问题及心得体会 1210. 对本设计过程及方法、手段的改进建议 1211. 任务分配 1212. 参考文献 1213. 课程设计评价(教师) 12如果你修改了下面的标题,请更新目录的域,并删掉这句话

课程设计报告课程设计内容本课程设计的内容是设计一个基于QT的文件传输软件,支持多用户以及文件的断点续传。课程设计目的考察自己对课程的掌握程度,以及自己实际的动手能力,编程能力。背景知识TCP/IP协议的原理QT软件的应用工具/准备工作硬件:安装有VS2012的PC机一台软件: Windows10操作系统 VS2012 Opencv3.1.4设计步骤与方法步骤1:设计客户端与服务器端的通信协议1、客户端与服务器端的请求协议2、服务器端与客户端数据交互协议步骤1.1:客户端与服务器端的交互协议设计|帧总长|请求类型|参数…|说明:请求下载列表|帧总长|列表|X|请求下载文件|帧总长|文件|文件路径|文件传输起始位|步骤1.2:服务器端与客户端数据交互协议|帧总长|列表/文件|数据|步骤2:编写服务器端步骤2.1:设计服务器的多用户响应重写了QTcpServer的虚函数,实现了每当一个客户端访问服务器是,开启一个线程响应客户端的请求。voidDownloadServer::incomingConnection(inthandle){DownloadThread*Thread=newDownloadThread(handle,this);Thread->start();}步骤2.2:设计服务器服务线程在这个函数中,线程主要负责两件事情,一、完成对客户端 请求的解析;二、响应客户端请求。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:客户端设计功能实现:1、向服务器端发送请求 2、等待接收服务器传来的数据具体实现代买如下向服务器端发送请求: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);}等待服务器传来的数据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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论