本意是把后綴為csv的檔案一行一行發送給服務器,結果服務器只readData函式觸發了一次就接受到客戶端
發送的15行內容,這是為何,求大佬(普通的檔案發送不好搞,服務器的接收資料格式被我寫死了)
結果是:服務器的info只有發送資料的第一行,而buf有15行內容。
按理來說服務器的info應該是列印15次每次都是不同的內容(客戶端for回圈了15次)
void dealclient::readData() //服務器,有資料過來就執行
{
QByteArray buf = m_socket->readAll();
qint64 operation = QString(buf).section("##",0,0).toInt();
if(operation == 4)
{
qDebug() << "打開檔案\n";
bool isOk = file.open(QIODevice::WriteOnly | QIODevice::Append);
if(false == isOk)
{
qDebug()<<"file open error 49";
return;
}
qDebug()<<"123456";
QString info = QString(buf).section("##",1,1);
qint64 len = file.write(buf);
qDebug() << info << "\n";
qDebug() << buf.length();
qDebug() << "關閉檔案\n";
file.close();
}
}
void exam_freezing::SendData(QTcpSocket *socket) //客戶端
{
qint64 operation = 4;
for(int i = 0;i < 15;i++)
{
QString line = choice_string_list.at(i)+"\n";
QString info = QString("%1##%2").arg(operation).arg(line);
socket->write(info.toLocal8Bit());
if(socket->waitForBytesWritten() == false)
{
usleep(1000);
}
qDebug() << info;
}
}
uj5u.com熱心網友回復:
你要理解qt的事件回圈這個東西,只有進入事件回圈才會真正把資料發出去,你一直sleep,當然沒有發出去轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/45596.html
標籤:Qt
