我在單個應用程序內部執行TCP文件客戶端服務器。Qt通過TCP發送文件
主要是,我發送每50000字節的文件名和文件的和。
客戶:
void client::sendFile(QString path)
{
QDataStream out(cl);
QFile toSend(path);
if (toSend.open(QIODevice::ReadOnly))
{
int s = 0;
QFileInfo fileInfo(toSend.fileName());
QString fileName(fileInfo.fileName());
out << fileName;
while (!toSend.atEnd())
{
QByteArray rawFile;
rawFile = toSend.read(50000);
out << rawFile;
qDebug() << "ToSend"<<rawFile.size();
s+=rawFile.size();
}
qDebug() << "Total:" << s;
}
}
...這是正確的我猜
服務器(ReadyRead插槽):
void server::receive()
{
QTcpSocket *sender = (QTcpSocket*) this->sender();
QDataStream in(sender);
QString fName;
in >> fName;
QFile newFile("D:\\"+fName);
if (newFile.open(QIODevice::WriteOnly))
{
while(sender->bytesAvailable())
{
QByteArray z;
in >> z;
newFile.write(z);
qDebug() << "Received " << z.size();
}
newFile.close();
}
}
...這是問題:第一itteration後while
破。
看:
ToSend 50000
ToSend 50000
ToSend 50000
ToSend 31135
Total: 181135
Received 50000
正如你看到的,只接受,而不是4
1塊如何解決這一問題?爲什麼bytesAvailable
在不應該時返回0? 會很好,知道這是很好的方法來接收文件通過TCP或不是:)以及:)
我想在你的接收器中,你必須等到181135字節收到。 – vahancho