当前位置: 首页 > news >正文

贵州网站建设公司工友洗手粉网站建设中

贵州网站建设公司,工友洗手粉网站建设中,wordpress 禁止更新,室内设计师网址导航传输文件和传输信息的区别#xff1a; 传输信息#xff0c;只是一条数据#xff0c;传输文件是多条数据传输信息传输过去一般都会显示#xff0c;传输文件一般不会显示#xff0c;一般只是存放在文件中传输文件需要传输#xff0c;文件大小和文件名称#xff08;不然不知…传输文件和传输信息的区别 传输信息只是一条数据传输文件是多条数据传输信息传输过去一般都会显示传输文件一般不会显示一般只是存放在文件中传输文件需要传输文件大小和文件名称不然不知道什么时候结束在这里使用的是服务器端发送数据客户端接收数据。 为了在本地测试把服务器端和客户端分项目编写方便在一台电脑上测试。 总的代码会在文件最后给出 目录显示 File_Tcp为服务器端发送文件File_Tcp_Socket 为客户端接收文件创建的时候忘记该类名了这里就使用widget了服务器端的编写 发送的规则 先发送文件的参数文件大小和文件名然后再发送文件的内容创建一个项目 pro文件中添加 QT network ui界面添加以下控件 tcp_server.h文件内容解析 1.添加以下头文件 #includeQTcpServer #includeQMessageBox #includeQFile #includeQMessageBox #includeQTcpSocket #includeQHostAddress #includeQNetworkInterface #includeQFileDialog #includeQDataStream #includeQFileInfo 2.添加私有成员 privateQTcpServer *server;//服务器端QTcpSocket *socket;//套接字QString FilePathName;//文件路径QString FileName;//文件名QFile * LocalFile;//文件指针打开需要传输的文件qint64 FileSize0;//文件总大小qint64 TFSize0;//已传输的大小qint64 ToBeSize0;//未传输的数据qint64 payloadSize64*1024;//有效的载荷64KBQByteArray block;//缓存用来临时存储需要发送的信息 3.槽函数 private slots:void on_pushButton_3_clicked();void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_4_clicked();//上面是ui界面转到槽生成的信号void Send_File(qint64 num);//用来传输文件内容 4.事件和其他函数 protected:void closeEvent(QCloseEvent *event);//重写关闭事件QString getIp();//获取IP tcp_server.cpp文件内容解析 1.构造函数中的内容 servernew QTcpServer(this);//QTcpServer的初始化QString IpgetIp();//获取本机的IP地址ui-lineEdit_4-setText(tr(%1).arg(Ip));//再主机的lineEdit中显示IP地址ui-lineEdit_5-setText(6666);//设置端口号socketnullptr;//初始化QTcpSocketconnect(server,QTcpServer::newConnection,[]()//当有新的连接时{QMessageBox::information(this,提示信息,已有新连接,QMessageBox::Ok);socketnew QTcpSocket(this);//套接字socketserver-nextPendingConnection();//获取套接字});//实现可以多次传输当文件地址改变时这些参数都置为0connect(ui-lineEdit,QLineEdit::textChanged,[]()//{FileSize0;//文件总大小TFSize0;//已传输的大小ToBeSize0;//未传输的数据ui-lineEdit_2-setText();ui-lineEdit_3-setText();});2.getIP函数的实现 QString TCP_Server::getIp()//获取IP {QListQHostAddress addssQNetworkInterface::allAddresses();//获取全部地址foreach(QHostAddress add,addss)//遍历这些地址{if(add.protocol()QAbstractSocket::IPv4Protocol)//如果地址为IVP4的话{return add.toString();//返回该地址}}return 0;//没有的话返回0 } 3.监听的实现 void TCP_Server::on_pushButton_3_clicked()//监听 {if(!server-listen(QHostAddress(ui-lineEdit_4-text()),ui-lineEdit_5-text().toInt()));//如果监听失败{return;} } 4.获取文件名的实现 void TCP_Server::on_pushButton_clicked()//获取文件名 {FilePathNameQFileDialog::getOpenFileName(this);//获取路径if(!FilePathName.isEmpty())//文件名不为空{QFileInfo fi(FilePathName);//创建一个文件信息对象FileNamefi.fileName();//获取文件名ui-lineEdit-setText(FilePathName);//放置文件名}} 5.取消的实现 void TCP_Server::on_pushButton_4_clicked()//取消 {if(server-isListening())//如果正在监听{server-close();if(LocalFile-isOpen()){LocalFile-close();}socket-abort();//断开连接} } 6.重写关闭事件 void TCP_Server::closeEvent(QCloseEvent *event)//重写关闭事件 {on_pushButton_4_clicked();//取消close(); } 7.发送的实现发送文件的一些参数 void TCP_Server::on_pushButton_2_clicked()//发送文件信息 {LocalFilenew QFile(FilePathName);//打开该文件if(!LocalFile-open(QFile::ReadOnly))//当文件打不开{QMessageBox::information(this,提示信息,发送失败,QMessageBox::Ok);return;}//当接收完一次数据后,执行传输文件的操作直到传输完connect(socket,SIGNAL(bytesWritten(qint64)),this,SLOT(Send_File(qint64)));//使用缓存FileSizeLocalFile-size();//获取文件的大小QDataStream Ds(block,QIODevice::WriteOnly);//创建一个数据流Ds.setVersion(QDataStream::Qt_5_9);//设置版本号;Dsqint64(0)qint64(0)FileName;//将数据写入流中FileSizeblock.size();//获取流中数据的大小Ds.device()-seek(0);//回到开头DsFileSizeqint64(block.size()-sizeof(qint64)*2);//数据的总长度和文件长度//把文件头传输出去同时修改待发送的字节数ToBeSizeFileSize-socket-write(block);block.resize(0);//把缓存置0以便下次使用} 这里主要解释一下 //当接收完一次数据后,执行传输文件的操作直到传输完connect(socket,SIGNAL(bytesWritten(qint64)),this,SLOT(Send_File(qint64))); 在这里使用新版的信号于槽会报错不知道什么原因。 bytesWrittenqint64每次将数据有效负载写入设备的当前写入通道时都会发出此信号。会返回写入的字节数。 当写入通道时使用Send_File(qint64)来统计字节数 8.Send_File(qint64)的实现 首先要统计数据判断数据如果还有未传输的数据继续传输在显示总的文件大小和已传输的大小如果已发送的文件大小总文件大小关闭文件关闭服务器提示传输完成void TCP_Server::Send_File(qint64 num)//传输文件数据 {qApp-processEvents();//防止传输文件时页面冻结TFSize(int)num;//更新已传输的数据大小if(ToBeSize0)//如果未传输的数据大于0{//当剩下的数据小于payloadSize时优先使用更小的值blockLocalFile-read(qMin(ToBeSize,payloadSize));//读取数据ToBeSize-(int)socket-write(block,block.size());//发送并更新数据大小block.resize(0);//清空缓存}else{LocalFile-close();}ui-lineEdit_3-setText(tr(%1).arg(FileSize/(1024*1024))MB);//总的数据量ui-lineEdit_2-setText(tr(%1).arg(TFSize/(1024*1024))MB);//已传输的数据if(FileSizeTFSize){LocalFile-close();//关闭文件server-close();//关闭服务器QMessageBox::information(this,提示信息,传输完成,QMessageBox::Ok);}} main函数 #include tcp_server.h #include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);TCP_Server w;w.show();return a.exec(); }服务器端的搭建  接收文件时需要判断是否接受了文件信息 接受了话再接受文件的内容创建一个项目 pro文件中添加 QT network ui界面中添加以下控件 widget.h文件的内容解析 1.添加以下头文件  #includeQTcpSocket #includeQDataStream #includeQMessageBox #includeQHostAddress #includeQFile 2.添加私有成员 QTcpSocket *socket;//套接字QFile *file;//文件指针qint64 RCDsize;//接收的数据qint64 ToBoSize;//未接收的数据qint64 Filesize;//文件总大小qint64 Allsize;//总大小QString FileName;//文件名称QByteArray inblock;//缓存 3.槽函数 private slots:void on_pushButton_clicked();void on_pushButton_2_clicked(); //以上未ui界面中转到槽实现void readData();//读取数据 4.重写事件 protected:void closeEvent(QCloseEvent *event);//重写关闭事件 widget.cpp文件的内容解析 1.构造函数 socketnew QTcpSocket(this);ui-lineEdit_2-setText(6666);//设置端口号未6666ToBoSize0;Filesize0;RCDsize0;connect(socket,QTcpSocket::readyRead,this,Widget::readData);//读取数据 2.连接的实现 void Widget::on_pushButton_clicked()//连接 { socket-abort();//断开已有连接//创建连接socket-connectToHost(QHostAddress(ui-lineEdit-text()),ui-lineEdit_2-text().toInt()); }//QHostAddress(ui-lineEdit-text())为地址 //ui-lineEdit_2-text().toInt()为端口号 3.取消的实现 void Widget::on_pushButton_2_clicked()//取消 {socket-abort();//断开连接if(file-isOpen()){file-close();}} 4.重写关闭事件 void Widget::closeEvent(QCloseEvent *event) {socket-abort();if (file-isOpen())file-close();close(); } 5.读取数据的实现 void Widget::readData()//读取数据 {QDataStream in(socket);//流读取数据in.setVersion(QDataStream::Qt_5_9);if(RCDsizesizeof(qint64)*2){if((socket-bytesAvailable()sizeof(qint64)*2)(Filesize0)){inAllsizeFilesize;//读取资源的大小文件的大小RCDsizesizeof(qint64)*2;//更新读取的数据}if((socket-bytesAvailable()Filesize)(Filesize!0)){inFileName;//读取文件名称filenew QFile(FileName);//打开文件ui-lineEdit_3-setText(QString(%1).arg(FileName));RCDsizeFilesize;//更新读取的数据if(!file-open(QFile::WriteOnly)){QMessageBox::information(this,提示信息,无法读取文件);return;}}else{return;}}if(RCDsizeAllsize)//如果接受的数据小于总数据继续接受{RCDsizesocket-bytesAvailable();inblocksocket-readAll();file-write(inblock);inblock.resize(0);}//更新显示的数据ui-lineEdit_4-setText(QString(%1).arg(RCDsize/(1024*1024))MB);ui-lineEdit_5-setText(QString(%1).arg(Allsize/(1024*1024))MB);if(RCDsizeAllsize)//如果接受的数据等于总数据传输完成{file-close();socket-close();QMessageBox::information(this,提示信息,接收完成,QMessageBox::Ok);//将数据清空以便下次使用filenullptr;//文件指针RCDsize0;//接收的数据ToBoSize0;//未接收的数据Filesize0;//文件总大小Allsize0;//总大小FileName;//文件名称inblock0;//缓存} } 运行结果 先运行服务器端再运行客户端客户端和服务器端都输入IP和端口号服务器端选择文件点击发送1.输入主机和端口号  2.点击连接然后点击监听 3.选择文件点击发送 数据太小所以0MB 注意传输完会断开连接所以还需要点击连接再点击监听  源码已发出 QtTcp传输文件简易-C文档类资源-CSDN文库
http://www.dnsts.com.cn/news/254234.html

相关文章:

  • 长春网站建设费用北京中小企业网站建设公司
  • 飞卢盗版做的最好的网站页面优化诊断
  • 学做网站教程网络营销有哪些营销方式
  • 遵义住建局查询网站免费网站建设网站推广
  • 毕设做网站什么主题比较好网站建设用什么软件比较好
  • 嘉兴做网站上海做网站cnsosu
  • 企业做网站需要在通管局备案广州手机app开发
  • 图片网站如何做百度排名成都市公园城市建设局网站
  • 网站结构有哪些类型微信开发网站建设程序
  • 东莞城乡住房建设厅网站做外贸网站的都有哪些类型的公司
  • 成都大型商城网站建设外贸网站建设广州
  • 个人网站的制作论文莱州人社局网站
  • 凡科网做网站花多少钱做细分领域的同城网站
  • 专业网站设计报价深圳建网站哪个公
  • 网站制作与管理技术...html 好的网站
  • 网站稳定期怎么做佛山市 骏域网站建设
  • 做网站的叫什么职位wordpress4.0 伪静态
  • 做网站的是什么工程师网页设计公司哪个好
  • 简单的网站php开发教程室内设计平面图上色
  • 外贸网站建设价格怎么样网页制作包括哪些内容
  • 在线购物网站怎么做陕西建设机械官方网站
  • 请别人做网站有风险吗在线做的网站
  • ps插件国外网站网上怎么查公司信息
  • 枣庄做网站优化网站建设功能说明书
  • 网站域名重定向百度商桥要怎么添加到网站
  • 四川哪家网站做的最好中国空间站纪念币
  • APP加网站建设预算多少钱海沧做网站
  • 网站不用了 怎么关闭吗wordpress添加二级菜单
  • 网站备案密码收不到网站备案流程和规则
  • 购物网站APP网站建设公司商务网站项目书