Ожидание чтения и сокращение загрузки процессора. |
Здравствуйте, гость ( Вход | Регистрация )
Ожидание чтения и сокращение загрузки процессора. |
LE0N |
28.3.2009, 10:39
Сообщение
#31
|
Студент Группа: Участник Сообщений: 97 Регистрация: 10.3.2009 Из: Беларусь Пользователь №: 604 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата А когда тогда не рано? Если никуда не лездь, то ничему и не научишься. Нужно стремиться к новым знаниям Ни кто с этим не спорит. Но на мой взгляд, он должен сначала решить эту же задачу без наворотов... |
|
|
dasV |
6.4.2009, 11:43
Сообщение
#32
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день уважаемые, только что вернулся из анабиоза.
igor_bogomolov я сделал (точнее попытался сделать) как Вы и сказали через canReadLine() однако столкнулся с недопониманием (не докурил) вот какого момента (информацию о котором не смог найти). Скажите если мы не можем прочитать строку, это может значить что мы прочитали все что нам прислали? То есть нам надо определить, или мы действительно не можем прочитать строку (а значит, нам надо бы подождать) или второй вариант, нам уже все прислали и надо обрабатывать строки? Вторая проблема вытекающая из первой, с которой столкнулся, это то, что на последнюю строку canReadLine() выдает false, хотя если вызывать принудительно ReadLine() выдает последнюю строку... не понятно так как если подождать, socketReadyRead() повторно не вызывается =(. Спасибо. |
|
|
igor_bogomolov |
6.4.2009, 12:19
Сообщение
#33
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
У вас хоть какой-то протокол общения с сервером есть? Не возвращается ли в самом начале сколько байт будет передано? Или завершающая последовательность какая-нибудь есть? Или вы отправляете команду и сервер начинает сыпать неизвестно чего и сколько
// add Можно убрать проверку canReadLine, и считывать все что приходит в буфер. При этом должен быть какой-то таймаут. Если в течении этого таймаута ничего не пришло, то считаем что все данные получены, и идем на оьработку Сообщение отредактировал igor_bogomolov - 6.4.2009, 12:27 |
|
|
dasV |
6.4.2009, 12:44
Сообщение
#34
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день.
Протокол общения обычный http, я знаю, сколько мне передадут или должны передать (так как есть Content-Length: который я обрабатываю) и получаю длину, которую пока не обрабатываю. Но это все ерунда полная (хотя и интересная), мне важно узнать, по какой причине socket не пишет на сервер второй раз =( Спасибо. |
|
|
igor_bogomolov |
6.4.2009, 12:57
Сообщение
#35
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
я знаю, сколько мне передадут или должны передать Так если вы знаете сколько быйт вы должны принять в ответ на свою команду, то проблем вообще быть не должно. Просто отслеживаете количество принятых данных и все.Но это все ерунда полная (хотя и интересная), мне важно узнать, по какой причине socket не пишет на сервер второй раз =( Вот тут я ничего не понял. О чем речь, что за ерунда? Что значит не пишет второй раз? Сформулируйте вопросс точнее. Еще лучьше коды приложите.
|
|
|
dasV |
6.4.2009, 13:25
Сообщение
#36
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
Да я действительно не очень…ммм, не очень корректно написал.
Проблема моей программы (и соответственно моей безграмотности) заключается в том, что в случае повторной отсылки GET запроса на сервер (state == CloseSession) , ничего не происходит, то есть запрос просто не передается!
Я к сожалению не хочу позорится, если Вы дадите почту я перешлю весь код. Спасибо. |
|
|
Litkevich Yuriy |
6.4.2009, 13:29
Сообщение
#37
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
trdm |
6.4.2009, 14:59
Сообщение
#38
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
да ладно, нормальный комплекс. Самое удивительное, он полезный плохо то, что помочь не могу, а код посмотреть хочется, тоже с такой задачОЙ бду заморачиваться... Сообщение отредактировал trdm - 6.4.2009, 15:01 |
|
|
igor_bogomolov |
6.4.2009, 15:53
Сообщение
#39
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Приложите еще хотябы код метода в котором вы считываете данные с соккета.
case(CloseSession): { tmp="GET "+get+"/CloseSession?SessionID="+ QString::number(SessionID)+" \r\n"; break; } Добавьте здесь qDebug() << socket.state(); qDebug() << socket.errorString () ; чтобы посмотреть состояние подключения на момент передачи второй команды. В общем надо убедиться что соединение не закрыто на момент второй передачи. |
|
|
dasV |
6.4.2009, 16:34
Сообщение
#40
|
Студент Группа: Участник Сообщений: 19 Регистрация: 2.2.2009 Пользователь №: 522 Спасибо сказали: 0 раз(а) Репутация: 0 |
То же самое, к сожалению, результат вывода примерно следующий
Первый раз QAbstractSocket::ConnectedState "Unknown error" MSG : Connected State is = 3 //i= socket.write( tmp.toUtf8() ) ; //socket.flush (); MSG : Connected State is = 3 Второй раз QAbstractSocket::ConnectedState "Unknown error" MSG : Connected State is = 3 //i= socket.write( tmp.toUtf8() ) ; //socket.flush (); MSG : Connected State is = 3 Раскрывающийся текст
Спасибо. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 23:53 |