版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西柳州市鱼峰区洛埠镇卫生院招聘2人备考题库及完整答案详解【名师系列】
- 施工现场人机工程学培训方案
- 2026重庆长江轴承股份有限公司招聘122人备考题库及参考答案详解(研优卷)
- 2026新疆兵团第一师八团医院招聘3人备考题库(黄金题型)附答案详解
- 2026湖南怀化市辰溪县残疾人联合会公益性岗位招聘1人备考题库附参考答案详解【轻巧夺冠】
- 2026中共常州市委党校招聘教师2人备考题库(长期)(培优a卷)附答案详解
- 2026广西上林国民村镇银行春季招聘备考题库含答案详解(满分必刷)
- 2026上海师范大学康城实验学校第二批教师招聘4人备考题库及完整答案详解【各地真题】
- 施工现场降尘措施方案
- 2026浙江事业单位统考丽水市松阳县招聘39人备考题库附答案详解【满分必刷】
- 胰岛素抵抗病症典型症状及护理指南
- 水专题测试卷-高考地理二轮复习讲练测(解析版)
- 2025年10月自考05677法理学试题及答案含评分参考
- 2025年专升本旅游管理历年真题汇编试卷及答案
- 2026年辽宁医药职业学院单招职业适应性测试必刷测试卷及答案1套
- 招投标实务培训
- 2025年北京省考行测笔试真题(附含答案)
- EP28-A3c 临床实验室中参考区间的定义、建立和验证(中文下载)
- 国家能源集团笔试试题及答案
- 低压电容柜维护手册
- 2025年医保政策培训试题及答案
评论
0/150
提交评论