资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
使用 Qt 将一系列图片通过网络发送到客户端动态显示实现功能:循环读取服务器端上的 10 张图片并通过网络发送到客户端,客户端实现动态显示。代码如下:服务器端-cpp view plaincopy1./*ServerMain.cpp*/ 2. 3.#include “ServerStream.h“ 4.#include 5. 6. 7.int main(int argc,char *argv) 8. 9. QApplication a(argc,argv); 10. ServerStream stream; 11. return a.exec(); 12. cpp view plaincopy1./*ServerStream.h*/ 2. 3.#ifndef IMAGESERVER_H_ 4.#define IMAGESERVER_H_ 5. 6.#include 7.#include 8.#include 9.#include 10. #include 11. #include 12. #include 13. 14. 15. 16. class ServerStream : public QObject 17. Q_OBJECT 18. private: 19. QTcpServer server; 20. QTcpSocket *socket; /socket 对象 21. void initNetWork(); 22. void delay(int len); 23. public: 24. ServerStream(QObject *parent=0); 25. ServerStream(); 26. QByteArray formHead(QByteArray by); 27. public slots: 28. void dealConnection(); 29. ; 30. 31. #endif cpp view plaincopy1./*ServerStream.cpp*/ 2. 3.#include “ServerStream.h“ 4.#include 5.#include 6.#include 7. 8. 9.ServerStream:ServerStream(QObject *parent) : QObject(parent) 10. 11. initNetWork(); 12. connect( 13. 14. 15. ServerStream:ServerStream() 16. 17. 18. 19. 20. /初始化网络 21. void ServerStream:initNetWork() 22. std:coutwrite(by); 41. socket-flush(); 42. std:cout0;i-) 54. by=by.prepend(0); 55. 56. return by; 57. 58. 59. /线程延时不能用,只好用最原始的延时方法了 60. void ServerStream:delay(int len) 61. volatile int m=0; 62. volatile int n=0; 63. for(m=0;m 5. 6.int main(int argc,char *argv) 7. 8. QApplication a(argc,argv); 9. ImageStream *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_ 5. 6.#include 7.#include 8.#include 9.#include 10. #include 11. #include 12. 13. 14. 15. class ImageStream : public QWidget 16. Q_OBJECT 17. private: 18. QHostAddress hostAddress; /主机地址 19. QTcpSocket client; /socket 对象 20. QLabel *ql_show; 21. QByteArray imageData; /存放接收到的图片数据的 QByteArray 22. bool hasReadHead; /是否接收到了当前所接收图片的第一个数据包。 23. long avalibleNum; 24. void initNetWork(); 25. public: 26. ImageStream(QWidget *qw=0); 27. ImageStream(); 28. void changeFace(); 29. public slots: 30. void getSocketImage(); /获取从服务器端传来的图片数据 31. 32. ; 33. 34. #endif cpp view plaincopy1./*ImageStream.cpp*/ 2. 3.#include “ImageStream.h“ 4.#include 5.#include 6. 7.ImageStream:ImageStream(QWidget *qw) : QWidget(qw) 8. 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-setAutoFillBackground(true); 13. hasReadHead=false; 14. avalibleNum=0; 15. 16. 17. 18. ImageStream:ImageStream() 19. 20. 21. 22. 23. 24. 25. /当有数据包发送来时,解析第一个数据包并获取所有数据包的总长度,获取的第二个以上的数据包不做此处理。 26. void ImageStream:getSocketImage() 27. if(!hasReadHead) 28. imageData.clear(); /第一个数据包发来时,先清空存储图片数据的空间 29. QByteArray by=client.readAll(); 30. avalibleNum=by.left(10).toLong(); /找出第一个数据包的前 10 个字节,由此获得数据总长度。 31. by.remove(0,10); /移除前 10 个字节 32. imageData.append(by); 33. hasReadHead=true; 34. if(imageData.length()=avalibleNum) /判断数据是否接收完毕 35. std:cout=avalibleNum) /判断数据是否接收完毕 43. std:coutsetPalette(palette); 56. 57. 58. void ImageStream:initNetWork() 59. std:cout“initing network“std:endl; 60. hostAddress.setAddress(“172.23.33.61“); 61. client.setParent(this); 62. client.connectToHost(hostAddress, 8867); 63. connect( 64. std:cout“network inited!“std:endl; 65. client.setReadBufferSize(1024*1024); 66. 运行效果截图:
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号