Добрый вечер, пишу приложение, которое принимает файлы от другого сервера, и почему-то сохраненные файлы оказываются произвольным образом обрезаны. Например файл 5мб оказывается ~300-400кб, а файл 80кб - 72кб.
Не могу понять в чем дело. Вот кусок кода:
void fclient::get_file(QListWidgetItem* item)
{
connect_to_s();
if(tcpSocket.state() != 3)
{
qDebug("not connected...");
return;
}
QByteArray str("GET ");
str += item->text()+"\n";
tcpSocket.write(str.data());
tcpSocket.flush();
QByteArray buf;
QFile recfile(item->text());
recfile.open(QIODevice::WriteOnly);
if(!recfile.exists())
qDebug("not exists");
if(recfile.isOpen())
qDebug("opened");
int n;
while(tcpSocket.waitForReadyRead())
{
buf = tcpSocket.read(BUFSIZ-1);
qDebug("tcp stat %d", tcpSocket.state());
recfile.write(buf);
recfile.flush();
}
recfile.close();
close_conn();
}
void fclient::req_file_list(void)
{
printf("%d\n", BUFSIZ);
connect_to_s();
if(tcpSocket.state() != 3)
return;
tcpSocket.write("list\n");
tcpSocket.flush();
QByteArray files, tmp;
int n=1;
while(n)
{
n = tcpSocket.waitForReadyRead();
files = tcpSocket.readAll();
QList<QByteArray> list = files.split('\n');
while(!list.empty())
{
tmp = list.first();
tmp = tmp.mid(0,tmp.lastIndexOf("\n"));
list.removeFirst();
if(tmp.isEmpty())
continue;
if(!tmp.contains("endl"))
widg->addItem(tmp.data());
else
{
n = 0;
break;
}
}
}
close_conn();
}