Доброго времени суток!
При выполнении лабораторной работы столкнулся со следующей проблемой.
Инициализирую сокет следующим образом:
soket = new QUdpSocket();
_port = 1234;
soket->bind(QHostAddress::Any, _port);Осуществляю передачу файла и текста:
void MainWindow::sendMessage(QString msg)
{
QByteArray data;
QDataStream out(&data, QIODevice::WriteOnly);
out << qint64(0);
out << qint8(TYPE_MESSAGE);
out << msg;
out.device()->seek(qint64(0));
out << qint64(data.size() - sizeof(qint64));
soket->writeDatagram(data, QHostAddress::Broadcast, _port);
}
void MainWindow::sendFile(QString filePath, QString fileName)
{
if(file != NULL)
return;
file = new QFile(filePath);
if(file->open(QFile::ReadOnly)) {
QByteArray data;
QDataStream out(&data, QIODevice::WriteOnly);
sendPartsOfFile();
} else
return;
}
void MainWindow::sendPartsOfFile()
{
while(!file->atEnd()) {
QByteArray block = file->read(qint64(4069));
QByteArray data;
QDataStream out(&data, QIODevice::WriteOnly);
out << qint64(0);
out << qint8(TYPE_FILE);
out << block;
out.device()->seek(qint64(0));
out << qint64(data.size() - sizeof(qint64));
soket->writeDatagram(data, QHostAddress::Broadcast, _port);
}
file->close();
file = NULL;
}И приём всего этого дела:
void MainWindow::read()
{
QByteArray data;
data.resize(soket->pendingDatagramSize());
QHostAddress *address = new QHostAddress();
soket->readDatagram(data.data(), data.size(), address);
QDataStream in(&data, QIODevice::ReadOnly);
qint64 size = -1;
if(in.device()->size() > sizeof(qint64))
in >> size;
else
return;
if(in.device()->size() - sizeof(qint64) < size)
return;
qint8 type = -1;
in >> type;
if(type == TYPE_FILE) {
QByteArray block;
in >> block;
QFile newFile("tmp.png");
if(newFile.open(QFile::Append))
newFile.write(block);
newFile.close();
}
if(type == TYPE_MESSAGE) {
QString message;
in >> message;
QTextCursor cursor(ui->textEdit->textCursor());
cursor.movePosition(QTextCursor::End);
cursor.insertText(message);
}
}Сообщения приходят нормально, а вот файл по какой-то причине сохраняется неполностью (проверяю на картинке). В чем может заключаться проблема?
Также интересует каким образом лучше всего осуществить шифрование передаваемых данных и замер скорости передачи данных.
Заранее благодарю.
