Qt QTcpSocket 流式传输
Posted
技术标签:
【中文标题】Qt QTcpSocket 流式传输【英文标题】:Qt QTcpSocket streaming 【发布时间】:2014-06-06 16:10:42 【问题描述】:我的应用程序通过QTcpSocket
将对象发送到服务器。
客户:
void client::sendFile(QString path)
QFile toSend(path);
QByteArray rawFile;
rawFile = toSend.readAll();
QDataStream out(cl);
out >> rawFile;
服务器:
void server::handleClient()
QTcpSocket *curCl = srv->nextPendingConnection();
QByteArray z;
QDataStream in(curCl);
in >> z;
QFile qwe("test.dat");
qwe.write(z);
qwe.close();
问题是什么都没有发生,但调试控制台告诉我:
QIODevice::write: device not open
QIODevice::read: device not open
...但是QDataStream
对象不允许我设置打开模式! :(
怎么了?
【问题讨论】:
【参考方案1】:QFile
+ QFile.write
(或QFile.read
)需要QFile.open
,参见示例:
写:
QFile qwe("test.dat");
if(qwe.open(QIODevice::WriteOnly | QIODevice::Text))
qwe.write(z);
qwe.close();
else
qDebug() << "Error";
或
#include <QTextStream>
...
QFile qwe("test.dat");
if(qwe.open(QIODevice::WriteOnly | QIODevice::Text))
QTextStream out(&qwe);
out << "This file is generated by Qt\n";
qwe.close();
else
qDebug() << "Error";
阅读:
QFile toSend(path);
if(toSend.open(QIODevice::ReadOnly | QIODevice::Text)) //Open "read file"
QByteArray rawFile;
rawFile = toSend.readAll();
QDataStream out(cl);
out >> rawFile;
toSend.close();//close
【讨论】:
以上是关于Qt QTcpSocket 流式传输的主要内容,如果未能解决你的问题,请参考以下文章
Qt - 当一个类中有多个 QTcpSocket 时,我如何知道哪个 QTcpSocket 发出了 readyRead 信号?