Russian Qt Forum
Апрель 30, 2024, 10:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2 3 ... 26
1  Qt / Общие вопросы / Re: Qt Script - максимальное число вычислений 2147483647? : Октябрь 28, 2014, 23:35
The following table describes the default conversion from a QScriptValue to a C++ type.

double   QScriptValue::toNumber()
float   float(QScriptValue::toNumber())
long   long(QScriptValue::toInteger())
ulong   ulong(QScriptValue::toInteger())
qlonglong   qlonglong(QScriptValue::toInteger())
qulonglong   qulonglong(QScriptValue::toInteger())

Беда, что ж они так?
Выхода нет получается?
Тут мне ответили что на Qt 4.8.6 работает код http://stackoverflow.com/questions/26600829/qt-script-how-to-use-numbers-bigger-than-2147483647
2  Qt / Общие вопросы / Qt Script - максимальное число вычислений 2147483647? : Октябрь 28, 2014, 05:04
Сделал на Qt Script свой скриптовый язык, и нужны математические операции с 64 битными числами.
Но в Qt Script коде ни в какую не удается использовать большие int.
Нагуглил что для стандарта ECMA максимальное число должно быть 9007199254740992
Но максимальное число которое работает в Qt Script это 2147483647

Код:
var test1=2147483647; // Все норм
test1+=1; // Тут уже ноль
var test2=21474836474; // Тут тоже ноль

Подскажите способы решения проблемы.
3  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce [РЕШЕНО] : Июль 15, 2013, 18:26
Там некоторые пакеты обязательны к получению, а некоторые не важные можно проигнорировать.
И надо сделать так чтобы важный пакет сразу отправлялся, а не ждал 5 секунд на ответ не важного.
В общем буду думать об оптимизации Улыбающийся
4  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce [РЕШЕНО] : Июль 15, 2013, 16:46
не отсылать пакет 5, пока не придет ответ от 4 пакета?
Ну это так и работает. Но выходит таймаут, например 5 секунд. И шлю следующий пакет.
А после этого приходит 4.
Делать abort и опять connect это слишком долго.
5  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce [РЕШЕНО] : Июль 15, 2013, 14:47
Остался еще вопрос. Есть ли еще какой-то идентификатор пакета QSslSocket чтобы знать что тот что отправлен был получен.
Например отправляю пакеты и по очереди получаю ответы:
1,2,3
А отправил 4 пакет и вышел таймаут, отсылаю следующий пакет номер 5, и тут внезапно приходит ответ от 4 пакета.
Можно ли задать пакету id или есть другие варианты решения проблемы?
6  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce [РЕШЕНО] : Июль 13, 2013, 21:07
Код:
	int currentLineDataType=0;
while(socketSender->bytesAvailable())
{
static QByteArray currentLine;
currentLine=socketSender->readLine();

if(currentLine.isEmpty())continue;
if(currentLine.startsWith("HTTP/1"))
{
if(!buffer.isEmpty())buffer.clear();
currentLineDataType=1;
endOfPacket=false;
continue;
}

switch(currentLineDataType)
{
case 0:
if(nextPacketMastBeSize&&currentLine.size()>1&&currentLine.size()<=8&&currentLine.right(2)=="\r\n")
{
currentLine.remove(currentLine.size()-2,2);
quint16 currentChunkSize=currentLine.toUShort(0,16);
if(currentChunkSize==0)endOfPacket=true;
else packetChunkSize+=currentChunkSize;
nextPacketMastBeSize=false;
break;
}
else
{
if(currentLine.size()>1&&currentLine.right(2)=="\r\n")
{
currentLine.remove(currentLine.size()-2,2);
nextPacketMastBeSize=true;
}
buffer.append(currentLine);
}
break;
case 1:
if(currentLine.endsWith("chunked")){packetIsChunked=true;break;}
if(currentLine!="\r\n")break;
currentLineDataType=0;
nextPacketMastBeSize=true;
break;
}
if(endOfPacket)
{
if(packetChunkSize<buffer.size())buffer.remove(0,buffer.size()-packetChunkSize);

emit dataReceived(buffer);

sendPendingData();
}
}
7  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce : Июль 09, 2013, 19:41
Решение: использовать QSslSocket и читать данные по спецификации HTTP
http://ru.wikipedia.org/wiki/Chunked_transfer_encoding
8  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce : Июль 08, 2013, 14:38
кстати, можете показать как вы делаете запрос?
по идее чтобы "склеить" достаточно
Код
C++ (Qt)
QByteArray & QByteArray::append ( const QByteArray & ba )

Дело в поддержке сервера метода ответа chunked.
Сдедал все сам с QSslSocket по документации http.
9  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce : Июль 07, 2013, 12:12
судя по http://forum.vingrad.ru/act-ST/f-466/t-344912.html
4 байта - в них содержится размер пакета.
\r\n - перевод строки. используется в протоколе http. более подробно смотрите в документации Улыбающийся

Да, QNetworkAccessManager и QHttp это сами обрабатывают.
Странно что в одних разделенных пакетах Http ответа есть этот размер а в других нет.
10  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce : Июль 06, 2013, 17:10
QNetworkAccessManager больше для работы с веб-сайтами подходит, получается.
для работы с сервером используйте сокеты.

Если использовать QSslSocket для Http запросов, то один ответ может быть разбит на несколько пакетов которые надо соединить.
Вопрос как их правильно склеивать? Смотрите картинку.
11  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce : Июль 04, 2013, 19:50
6 подключений висящих на портах
расскажите подробнее, что за 6 подключений? никогда не слышал о них

QHttp делает 1 подключение к серверу.
А QNetworkAccessManager целых 6, при том это значение в коде прописано как const для десктопов.

Note: QNetworkAccessManager queues the requests it receives. The number of requests executed in parallel is dependent on the protocol. Currently, for the HTTP protocol on desktop platforms, 6 requests are executed in parallel for one host/port combination.

const int QHttpNetworkConnectionPrivate::defaultChannelCount = 6;

Откройте tcpview и подключитесь программой через QNetworkAccessManager увидите там больше одного подключения.

Это означает что если послать 6 QNetworkRequest то они будут обрабатываться одновременно, и могут вернуться назад не в том порядке.

http://www.prog.org.ru/topic_24065_0.html

Можно сделать с помощью QEventLoop задержку, но оно все-равно биндит резервные подключения.

Было бы прекрасно если в QNetworkAccessManager можно задать один паралельный запрос одновременно.

К стати проект тут: https://sourceforge.net/projects/bitcointrader/
12  Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce : Июль 04, 2013, 10:14
я такой код использую.
если поможет и как-то оптимизируете код, выложите тут свой вариант.

Спасибо! Но хотелось бы обойтись без QEventLoop и 6 подключений висящих на портах.
Пока что вижу что лучший вариант это вернуться на QHttp.
Наверно стоит написать свой класс на базе QSslSocket.

Как-то странно что QNetworkAccessManager  нельзя настроить так. В Qt5 тоже нет возможности сделать один поток?
13  Qt / Работа с сетью / QNetworkAccessManager и параметр Nonce [РЕШЕНО] : Июль 04, 2013, 00:51
Есть у меня программа Qt Bitcoin Trader.
Решил наконец то перейти с QHttp на QNetworkAccessManager.
Но закрались подводные камни с параметром nonce.
Все запросы должны доходить до сервера в той последовательности что были отправлены.
В QHttp это работало как надо. Но не хватало возможности задать таймаут запроса и тп.

QNetworkAccessManager работает в параллельном режиме в 6 потоков.
Можно ли задать ему только 1 поток?

В сервер надо посылать число с постоянным инкрементом.
1,2,3,4, если придет 1,2,4,3 то будет ошибка.
14  Qt / Общие вопросы / Re: Двоичный Counter с помощью QByteArray : Сентябрь 16, 2012, 21:47
Спасибо за ответы.
Не знаю почему я не догадался использовать QDataStream.
Думал может для этого есть какая нибудь одна функция.

Код:
Код:
QByteArray data;
QDataStream stream(&data,QIODevice::WriteOnly);
stream<<n;
работает больше чем в два раза быстрее чем этот:
Код:
QByteArray data;
data=QByteArray::fromHex(QByteArray::number(n,16));
15  Qt / Общие вопросы / Двоичный Counter с помощью QByteArray : Сентябрь 15, 2012, 03:25
Надо записать в файл последовательно цифру от 0 до n в бинарном виде.
Это делаю с помощью QByteArray::fromHex(QByteArray::number(n,16)).
Но это с виду не очень рациональное решение.
Можно ли в Qt сделать это проще одной командой?
Перечитал документацию QByteArray так и не нашел то что нужно.
Страниц: [1] 2 3 ... 26

Страница сгенерирована за 0.091 секунд. Запросов: 23.