使用Qt将一系列图片通过网络发送到客户端动态显示_第1页
使用Qt将一系列图片通过网络发送到客户端动态显示_第2页
使用Qt将一系列图片通过网络发送到客户端动态显示_第3页
使用Qt将一系列图片通过网络发送到客户端动态显示_第4页
使用Qt将一系列图片通过网络发送到客户端动态显示_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、使用Qt将一系列图片通过网络发送到客户端动态显示实现功能:循环读取服务器端上的10张图片并通过网络发送到客户端,客户端实现动态显示。代码如下:服务器端-cpp view plaincopy1. /*ServerMain.cpp*/  2.   3. #include "ServerStream.h"  4. #include <QtGui/QApplication>  5.   6.   7. int m

2、ain(int argc,char *argv)  8.   9.    QApplication a(argc,argv);  10.    ServerStream stream;  11.    return a.exec();  12.   cpp view plaincopy1. /*ServerStream.h*/&

3、#160; 2.   3. #ifndef IMAGESERVER_H_  4. #define IMAGESERVER_H_  5.   6. #include <iostream>  7. #include <QtNetwork/QHostAddress>    8. #include <QtNetwork/QTcpSocket>  9.

4、 #include <QtNetwork/QTcpServer>  10. #include <QtGui/QImage>  11. #include <QtCore/QThread>  12. #include <QtGui/QWidget>  13.   14.   15.   16. class ServerStream : publ

5、ic QObject   17.    Q_OBJECT  18.    private:  19.       QTcpServer server;  20.       QTcpSocket *socket;   /socket对象  21. &

6、#160;     void initNetWork();  22.       void delay(int len);  23.    public:  24.       ServerStream(QObject *parent=0);  25.   &

7、#160;   ServerStream();  26.       QByteArray formHead(QByteArray by);  27.    public slots:  28.       void dealConnection();  29. ;  30. &

8、#160; 31. #endif  cpp view plaincopy1. /*ServerStream.cpp*/  2.   3. #include "ServerStream.h"  4. #include <string>  5. #include <QtCore/QFile>  6. #include <QtCore/QThread> &#

9、160;7.   8.   9. ServerStream:ServerStream(QObject *parent) : QObject(parent)  10.   11.     initNetWork();  12.     connect(&server,SIGNAL(newConnection(),this,SLOT(dealConnection(); &#

10、160;13.   14.   15. ServerStream:ServerStream()  16.     17.   18.   19.   20. /初始化网络  21. void ServerStream:initNetWork()  22.     std:cout<<"initing network.

11、"<<std:endl;  23.     server.setParent(this);  24.     server.listen(QHostAddress:Any,8867);   25.     std:cout<<"network inited!"<<std:endl;  26.  

12、0;27.   28. /当有连接时,将图片发送过去  29. void ServerStream:dealConnection()  30.     int num=0;  31.     long len=0;  32.     socket=server.nextPendingConnection();   33

13、.     for(num=1;num<=10;num+)  34.         QFile file("/images/"+QString:number(num)+".jpg");  35.         file.open(QIODevice:ReadOnly);  

14、60;/在Qt中,文件需要打开了才能进行操作,这点与java不同  36.         QByteArray by;  37.         by=file.readAll();  38.         len=by.length();    

15、;/获取数据的总长度  39.         by.prepend(formHead(QByteArray:number(qlonglong)len);  /将要发送的数据总长度加在数据的最前10个字节中,不足的在前面补零。  40.         len=socket->write(by);  41.    

16、0;    socket->flush();     42.         std:cout<<len<<"bytes have been written!"<<std:endl;  43.         delay(7000);&#

17、160; 44.         if(num=10) num=1;  45.       46.   47.   48.   49. /将数据长度封装在10个字节的范围内,不足的在前面补零  50. QByteArray ServerStream:formHead(QByteArray by)  

18、51.     int len=by.length();  52.     int i=0;  53.     for(i=10-len;i>0;i-)  54.        by=by.prepend('0');  55.      

19、 56.     return by;  57.   58.   59. /线程延时不能用,只好用最原始的延时方法了  60. void ServerStream:delay(int len)  61.     volatile int m=0;  62.     volatile int

20、 n=0;  63.     for(m=0;m<len;m+)  64.        for(n=0;n<len;n+);  65.       66.   运行效果截图: 客户端-cpp view plaincopy1. /*Main.cpp*/  2.   3

21、. #include "ImageStream.h"  4. #include <QtGui/QApplication>  5.   6. int main(int argc,char *argv)  7.   8.    QApplication a(argc,argv);  9.    ImageStream *

22、is=new ImageStream();  10.    is->show();  11.    return a.exec();  12.   cpp view plaincopy1. /*ImageStream.h*/  2.   3. #ifndef IMAGESTREAM_H_  4. #define IMAGESTREAM_H_&

23、#160; 5.   6. #include <QtGui/QWidget>  7. #include <QtGui/QLabel>  8. #include <iostream>  9. #include <QtGui/QPalette>  10. #include <QtNetwork/QHostAddress>    11. #in

24、clude <QtNetwork/QTcpSocket>  12.   13.   14.   15. class ImageStream : public QWidget  16.    Q_OBJECT  17.    private:  18.       QHostAd

25、dress hostAddress;   /主机地址  19.       QTcpSocket client;   /socket对象  20.       QLabel *ql_show;   21.       QByteArray image

26、Data;   /存放接收到的图片数据的QByteArray  22.       bool hasReadHead;   /是否接收到了当前所接收图片的第一个数据包。  23.       long avalibleNum;  24.       void initN

27、etWork();  25.    public:  26.       ImageStream(QWidget *qw=0);  27.       ImageStream();  28.       void changeFace();  29.  

28、60; public slots:  30.       void getSocketImage();  /获取从服务器端传来的图片数据  31.         32. ;  33.   34. #endif  cpp view plaincopy1. /*ImageStream.cpp*/

29、60; 2.   3. #include "ImageStream.h"  4. #include <QtCore/QFile>  5. #include <QtCore/QByteArray>  6.   7. ImageStream:ImageStream(QWidget *qw) : QWidget(qw)  8.    

30、60;initNetWork();  9.     this->setGeometry(0,0,500,400);  10.     ql_show=new QLabel(this);  11.     ql_show->setGeometry(50,50,400,300);  12.     ql_show->setAutoFi

31、llBackground(true);  13.     hasReadHead=false;  14.     avalibleNum=0;  15.   16.   17.   18. ImageStream:ImageStream()  19.       20.   21.  &#

32、160;22.   23.   24.   25. /当有数据包发送来时,解析第一个数据包并获取所有数据包的总长度,获取的第二个以上的数据包不做此处理。  26. void ImageStream:getSocketImage()  27.    if(!hasReadHead)  28.       imageData.clear();   /第

33、一个数据包发来时,先清空存储图片数据的空间  29.       QByteArray by=client.readAll();     30.       avalibleNum=by.left(10).toLong();   /找出第一个数据包的前10个字节,由此获得数据总长度。  31.     

34、60; by.remove(0,10);  /移除前10个字节  32.       imageData.append(by);  33.       hasReadHead=true;  34.       if(imageData.length()>=avalibleNum)   /判断数

35、据是否接收完毕  35.          std:cout<<"receive a image,length="<<avalibleNum<<std:endl;  36.          changeFace();  37.     

36、60;    hasReadHead=false;  38.         39.    else  40.       QByteArray by=client.readAll();  41.       imageData.append(by);

37、0; 42.       if(imageData.length()>=avalibleNum)   /判断数据是否接收完毕  43.          std:cout<<"receive a image,length="<<avalibleNum<<std:endl;  44.          changeFace();  45.          hasReadHead=false;&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论