<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; [Qt] Передача файла через QUdpSoket с шифрованием и замерос скорости]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=25669&amp;type=atom" />
	<updated>2012-12-21T20:12:54Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=25669</id>
		<entry>
			<title type="html"><![CDATA[Re: [Qt] Передача файла через QUdpSoket с шифрованием и замерос скорости]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=315958#p315958" />
			<content type="html"><![CDATA[<p>Т.к. время прижало не разбирался с этим, а переписал на Python&#039;е и всё заработало.</p>]]></content>
			<author>
				<name><![CDATA[Osanve]]></name>
				<uri>https://linuxforum.ru/profile.php?id=14375</uri>
			</author>
			<updated>2012-12-21T20:12:54Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=315958#p315958</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Qt] Передача файла через QUdpSoket с шифрованием и замерос скорости]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=315601#p315601" />
			<content type="html"><![CDATA[<p>Отладка показала, что происходит отправка 27мми пакетов, а принимается по какой-то причине только 25. Никак не могу понять в чем может быть причина.</p>]]></content>
			<author>
				<name><![CDATA[Osanve]]></name>
				<uri>https://linuxforum.ru/profile.php?id=14375</uri>
			</author>
			<updated>2012-12-20T07:15:52Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=315601#p315601</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Qt] Передача файла через QUdpSoket с шифрованием и замерос скорости]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=315587#p315587" />
			<content type="html"><![CDATA[<p>Особо в код не вчитывался, но с ходу водник вопрос вы уверены, что ваш файл пересылается одним пакетом?</p><p>При помощи&nbsp; qDebug поглядите на число байт получаемых soket-&gt;readDatagram; посмотрите на вывод pendingDatagramSize(), и сравните эту информацию с размером файла</p>]]></content>
			<author>
				<name><![CDATA[voral]]></name>
				<uri>https://linuxforum.ru/profile.php?id=841</uri>
			</author>
			<updated>2012-12-20T04:46:04Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=315587#p315587</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[[Qt] Передача файла через QUdpSoket с шифрованием и замерос скорости]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=315584#p315584" />
			<content type="html"><![CDATA[<p>Доброго времени суток!</p><p>При выполнении лабораторной работы столкнулся со следующей проблемой.</p><p>Инициализирую сокет следующим образом:<br /></p><div class="codebox"><pre><code>    soket = new QUdpSocket();
    _port = 1234;
    soket-&gt;bind(QHostAddress::Any, _port);</code></pre></div><p>Осуществляю передачу файла и текста:<br /></p><div class="codebox"><pre><code>void MainWindow::sendMessage(QString msg)
{
    QByteArray data;
    QDataStream out(&amp;data, QIODevice::WriteOnly);
    out &lt;&lt; qint64(0);
    out &lt;&lt; qint8(TYPE_MESSAGE);
    out &lt;&lt; msg;
    out.device()-&gt;seek(qint64(0));
    out &lt;&lt; qint64(data.size() - sizeof(qint64));
    soket-&gt;writeDatagram(data, QHostAddress::Broadcast, _port);
}

void MainWindow::sendFile(QString filePath, QString fileName)
{
    if(file != NULL)
        return;

    file = new QFile(filePath);
    if(file-&gt;open(QFile::ReadOnly)) {
        QByteArray data;
        QDataStream out(&amp;data, QIODevice::WriteOnly);

        sendPartsOfFile();
    } else
        return;
}

void MainWindow::sendPartsOfFile()
{
    while(!file-&gt;atEnd()) {
        QByteArray block = file-&gt;read(qint64(4069));
        QByteArray data;
        QDataStream out(&amp;data, QIODevice::WriteOnly);
        out &lt;&lt; qint64(0);
        out &lt;&lt; qint8(TYPE_FILE);
        out &lt;&lt; block;
        out.device()-&gt;seek(qint64(0));
        out &lt;&lt; qint64(data.size() - sizeof(qint64));
        soket-&gt;writeDatagram(data, QHostAddress::Broadcast, _port);
    }
    file-&gt;close();
    file = NULL;
}</code></pre></div><p>И приём всего этого дела:<br /></p><div class="codebox"><pre><code>void MainWindow::read()
{
    QByteArray data;
    data.resize(soket-&gt;pendingDatagramSize());
    QHostAddress *address = new QHostAddress();
    soket-&gt;readDatagram(data.data(), data.size(), address);

    QDataStream in(&amp;data, QIODevice::ReadOnly);

    qint64 size = -1;
    if(in.device()-&gt;size() &gt; sizeof(qint64))
        in &gt;&gt; size;
    else
        return;
    if(in.device()-&gt;size() - sizeof(qint64) &lt; size)
        return;

    qint8 type = -1;
    in &gt;&gt; type;
    if(type == TYPE_FILE) {
        QByteArray block;
        in &gt;&gt; block;
        QFile newFile(&quot;tmp.png&quot;);
        if(newFile.open(QFile::Append))
            newFile.write(block);
        newFile.close();
    }
    if(type == TYPE_MESSAGE) {
        QString message;
        in &gt;&gt; message;

        QTextCursor cursor(ui-&gt;textEdit-&gt;textCursor());
        cursor.movePosition(QTextCursor::End);
        cursor.insertText(message);
    }
}</code></pre></div><p>Сообщения приходят нормально, а вот файл по какой-то причине сохраняется неполностью (проверяю на картинке). В чем может заключаться проблема?</p><p>Также интересует каким образом лучше всего осуществить шифрование передаваемых данных и замер скорости передачи данных.</p><p>Заранее благодарю.</p>]]></content>
			<author>
				<name><![CDATA[Osanve]]></name>
				<uri>https://linuxforum.ru/profile.php?id=14375</uri>
			</author>
			<updated>2012-12-20T00:03:22Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=315584#p315584</id>
		</entry>
</feed>
