课程设计--基于qt的局域网聊天室内容摘要:

break。 金陵科技学院课程设计报告 11 case ParticipantLeft: in userName localHostName。 participantLeft(userName,localHostName,time)。 break。 case FileName: break。 case Refuse: break。 } } } 服务器端主要程序代码分析 // 开始发送数据 void TcpServer::sendMessage() //是 connect 中的槽函数 { uiserverSendBtnsetEnabled(false)。 //当在传送文件的过程中,发送按钮不可用 clientConnection = tcpServernextPendingConnection()。 //用来获取一个已连接的 TcpSocket //bytesWritten 为 qint64 类 型,即长整型 connect(clientConnection, SIGNAL(bytesWritten(qint64)), //? this, SLOT(updateClientProgress(qint64)))。 uiserverStatusLabelsetText(tr(开始传送文件 %1。 ).arg(theFileName))。 localFile = new QFile(fileName)。 //localFile 代表 的是文件内容本身 if(!localFileopen((QFile::ReadOnly))){ QMessageBox::warning(this, tr(应用程序 ), tr(无法读取文件 %1:\n%2) .arg(fileName).arg(localFileerrorString()))。 //errorString是系统自带的信息 return。 金陵科技学院课程设计报告 12 } TotalBytes = localFilesize()。 //文件总大小 //头文件中的定义 QByteArray outBlock。 QDataStream sendOut(amp。 outBlock, QIODevice::WriteOnly)。 //设置输出流属性 (QDataStream::Qt_4_7)。 //设置 Qt 版本,不同版本的数据流格式不同 ()。 // 开始计时 QString currentFile = (() //currentFile 代表所选文件的文件名 (39。 /39。 )1)。 //qint64(0)表示将 0 转换成 qint64 类型 ,与 (qint64)0 等价 //如果是,则此处为依次写入总大小信息空间,文件名大小信息空间,文件名 sendOut qint64(0) qint64(0) currentFile。 TotalBytes += ()。 //文件名大小等信息 +实际文件大小 //()为返回 io 设备的当前设置, seek(0)表示设置当前 pos 为 0 ()seek(0)。 //返回到 outBlock 的开始,执行覆盖操作 //发送总大小空间和文件名大小空间 sendOut TotalBytes qint64((() sizeof(qint64)*2))。 //qint64 bytesWritten。 bytesToWrite 表示还剩下的没发送完的数据 //clientConnectionwrite(outBlock)为套接字将内容发送出去,返回实际发送出去的字节数 bytesToWrite = TotalBytes clientConnectionwrite(outBlock)。 (0)。 //why?? } 客户端主要程序代码分析 // 创建新连接 void TcpClient::newConnect() { blockSize = 0。 tcpClientabort()。 //取消已有的连接 tcpClientconnectToHost(hostAddress, tcpPort)。 //连接到指定 ip地址和端口的主机 ()。 } 金陵科技学院课程设计报告 13 // 读取数据 void TcpClient::readMessage() { QDataStream in(tcpClient)。 //这里的 QDataStream 可以直接用 QTcpSocket 对象做参数 (QDataStream::Qt_4_7)。 float useTime = ()。 if (bytesReceived = sizeof(qint64)*2) { //说明刚开始接受数据 if ((tcpClientbytesAvailable() //bytesAvailable 为返回将要被读取的字节数 = sizeof(qint64)*2) amp。 amp。 (fileNameSize == 0)) { 金陵科技学院课程设计报告 14 五、结论 本文使用面向对象程序设计思想,设计开发 QT 聊天系统。 聊天系统要完成的任务就是提供用户操作界面,方便用户之间在局域网的环境下相互通信。 程序的核心是通过基于 TCP/IP 的 Socket 来实现消息传递的通信部分。 通过此次课程设计的锻炼,提高了我们解决实际问题的能力,让我们能更加从容地面对未来的工作。 金陵科技学院课程设计报告 15 六、参考文献 [1] 霍亚飞 .Qt 及 Qt Quick 开发实战精解 .北京航空航天大学出版社 ,2020;15512 [2] 布兰切特 (Jasmin Blanchette)等 .C++GUI Programming with Qt4[ M] .第二版 .电子工业出版社 ,2020: 22330 金陵科技学院课程设计报告 16 七、附录 关键代码: : include include include QFile include QTcpServer include QTcpSocket include QMessageBox include QFileDialog include QDebug TcpServer::TcpServer(QWidget *parent) : QDialog(parent), ui(new Ui::TcpServer) { uisetupUi(this)。 setFixedSize(350,180)。 tcpPort = 6666。 tcpServer = new QTcpServer(this)。 connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendMessage()))。 initServer()。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。