Russian Qt Forum

Qt => Работа с сетью => Тема начата: akaMDA от Октябрь 22, 2009, 21:23



Название: Передача файла по UDP
Отправлено: akaMDA от Октябрь 22, 2009, 21:23
Мне необходимо передать файл посредством UDP!!!!! (именно UDP, а не FTP). написал вот что
функция передачи:
Код
C++ (Qt)
void SendFile_Widget::SendFile()
{
QString fil=QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("1"), QString::fromLocal8Bit("c:\\"), 0,0,0);
 
if(fil.isEmpty()) return;
 
QStringList lt=fil.split('/');
QString nam_file=lt.takeLast();
QByteArray datf;
QFile fil_out(fil);
QDataStream out(&datf, QIODevice::WriteOnly);
 
fil_out.open(QIODevice::ReadOnly);
 
QString fils(fil_out.readAll());
out<<nam_file<<fils;
tb->setText(fils);
socket_out->writeDatagram(datf, con_host.getIP(cb->currentText()), 1012);

слот приема:
Код
C++ (Qt)
void SendFile_Widget::InboxFile()
{
 
QByteArray dat;
QHostAddress* ha=new QHostAddress;
quint16* port=new quint16;
do
{
dat.resize(socket_in->pendingDatagramSize());
socket_in->readDatagram(dat.data(), dat.size(), ha, port);
}while(socket_in->hasPendingDatagrams());
 
QString mess;
QString nam_file;
 
QDataStream in(&dat, QIODevice::ReadOnly);
in>>nam_file>>mess;
 
QByteArray datf;
QFile newfil(nam_file);
QDataStream inf(&datf, QIODevice::WriteOnly);
newfil.open(QIODevice::WriteOnly);
inf<<mess;
newfil.write(datf);
QMessageBox::warning(0, QString::fromLocal8Bit("ВНИМАНИЕ"), QString::fromLocal8Bit("Пришел файл!"), QMessageBox::Ok);
 
};
но результат записывается в бинарном виде и нормально соответственно не открывается.
Посоветуйте пожалуйста, как правильно результат записать в небинарном виде?


Название: Re: Передача файла по UDP
Отправлено: akaMDA от Октябрь 22, 2009, 22:43
По большому счету, как считать файл в QByteArray и записать содержимое под новым именем?


Название: Re: Передача файла по UDP
Отправлено: pastor от Октябрь 22, 2009, 22:50
Пробуем так в слоте приема:

Код
C++ (Qt)
newfil.open(QIODevice::WriteOnly | QIODevice::Text)


Кстате, а че б не использовать QTextStream вместо QDataStream?


Название: Re: Передача файла по UDP
Отправлено: akaMDA от Октябрь 22, 2009, 23:08
Не, не помогло. если data - то открывает файл, говоря что это бинарник. а если text - то файл оказывается пустой.
я уже пытаюсь хотя бы сделать так
Код
C++ (Qt)
QByteArray datf;
QFile fil_out(fil);
QTextStream out(&datf, QIODevice::WriteOnly| QIODevice::Text);
 
fil_out.open(QIODevice::ReadOnly);
 
out<<fil_out.readAll();
 
QFile newfil("c:/1/fil.txt");
newfil.open(QIODevice::WriteOnly | QIODevice::Text);
newfil.write(datf);
хотя бы считать файл любой и перезаписать.
Может кто знает как действует функция copy() в qt?


Название: Re: Передача файла по UDP
Отправлено: akaMDA от Октябрь 23, 2009, 20:37
Вроде разобрался. Если читать файл не из потока, то все ОК))
Посоветуйте плиз ссылочку про потоки в Qt - хочу поглубже разобраться с вопросом.


Название: Re: Передача файла по UDP
Отправлено: BRE от Октябрь 23, 2009, 20:52
Посоветуйте плиз ссылочку про потоки в Qt - хочу поглубже разобраться с вопросом.
Традиционно.  ;)
Assistant:
* QDataStream
* Format of the QDataStream Operators