QT5.10控制台下利用QTcpSocket类局域网传送图片

编程入门 行业动态 更新时间:2024-10-26 04:25:16

QT5.10控制台下利用QTcpSocket类<a href=https://www.elefans.com/category/jswz/34/1769448.html style=局域网传送图片"/>

QT5.10控制台下利用QTcpSocket类局域网传送图片

与简单的传送一个包含字符串和int变量的结构对象不同,图片属于大文件,传送时会自动拆分为多个小包并一一传送,所以接收的时候需要多次接收并拼接。

客户端(发送):


#include <iostream>#include <QApplication>#include <QPixmap>///QT Socket
#include <QTcpSocket>
#include <QHostAddress>#include <QBuffer>using namespace std;int main(int argc, char *argv[])
{QApplication a(argc, argv);QTcpSocket socket1;//开始连接服务端socket1.connectToHost(QHostAddress("192.168.100.101"),50002);//设置连接信息,并尝试连接qDebug() <<"正在连接服务器,最长5秒...";if (socket1.waitForConnected(5000))//连接等待,如果connectToHost连接成功,则立即返回true,否则到达最延迟后返回false{qDebug() << "已连接!";}else{qDebug() << "连接失败!";socket1.close();return a.exec();}QPixmap Pixmap("aaa.bmp");QBuffer buffer;Pixmap.save(&buffer,"bmp");quint32 pix_len = (quint32)buffer.data().size();qDebug() << "image size:" << pix_len;QByteArray dataArray;dataArray.append(buffer.data());quint32 write_len = socket1.write(dataArray);qDebug() << "write len:" << write_len;if(socket1.waitForBytesWritten(10000)){qDebug() << "data发送成功!";}else{qDebug() << "发送超时!";}socket1.close();return a.exec();
}

服务端(接收):

#include <iostream>#include <QApplication>//QT Socket
#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>#include <QPixmap>
#include <QBuffer>using namespace std;int main(int argc, char *argv[])
{QApplication a(argc, argv);QTcpServer server;server.listen(QHostAddress::Any,50002);QTcpSocket * socket;qDebug() << "正在获取连接...最长100秒";if(server.waitForNewConnection(100000)){qDebug() << "连接成功!";socket = server.nextPendingConnection();}else{qDebug() << "等待连接超时!";server.close();return a.exec();}QByteArray array;if(socket->waitForReadyRead(100000))//等待直到有可读内容,最长100秒{while(socket->waitForReadyRead(100)){qDebug()<< "bytesAvailable";array.append((QByteArray)socket->readAll());//append()会拼接多个小包}}else{qDebug() << "读取等待超时!";server.close();return a.exec();}QPixmap pixmap;pixmap.loadFromData(array);//提取图片if(pixmap.save("ddd","bmp"))qDebug() << "保存图片成功!";cout << "end" << endl;server.close();return a.exec();
}

 

更多推荐

QT5.10控制台下利用QTcpSocket类局域网传送图片

本文发布于:2023-07-28 20:50:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1306839.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:局域网   台下   图片   QTcpSocket

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!