Просмотр сообщений
|
Страниц: [1] 2 3 ... 26
|
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; // Тут тоже ноль
Подскажите способы решения проблемы.
|
|
|
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&¤tLine.size()>1&¤tLine.size()<=8&¤tLine.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&¤tLine.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(); } }
|
|
|
8
|
Qt / Работа с сетью / Re: QNetworkAccessManager и параметр Nonce
|
: Июль 08, 2013, 14:38
|
кстати, можете показать как вы делаете запрос? по идее чтобы "склеить" достаточно C++ (Qt) QByteArray & QByteArray::append ( const QByteArray & ba )
Дело в поддержке сервера метода ответа chunked. Сдедал все сам с QSslSocket по документации 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 так и не нашел то что нужно.
|
|
|
|
|