crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

5 страниц V  « < 3 4 5  
Ответить в данную темуНачать новую тему
> Ожидание чтения и сокращение загрузки процессора.
Sokoloff
  опции профиля:
сообщение 6.4.2009, 18:09
Сообщение #41


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(dasV @ 6.4.2009, 13:44) *
Добрый день.

Протокол общения обычный http, я знаю, сколько мне передадут или должны передать (так как есть Content-Length: который я обрабатываю) и получаю длину, которую пока не обрабатываю.

Но это все ерунда полная (хотя и интересная), мне важно узнать, по какой причине socket не пишет на сервер второй раз =(

Спасибо.


Сам я с QT только разбираюсь, поэтому кодом помочь не могу, но опыт работы с HTTP есть, может помогут следующие идеи.
HTTP - это протокол без поддержки сессий, т.е. запрос/получение страницы отдельная tcp сессия. Поэтому когда tcp сессия закрылась, значит получили все данные. Темболее, что поле content-length может и не присутьствовать в http заголовке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dasV
  опции профиля:
сообщение 7.4.2009, 18:36
Сообщение #42


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 2.2.2009
Пользователь №: 522

Спасибо сказали: 0 раз(а)




Репутация:   0  


Похоже, что так оно и есть, после получения данных и повторной попытки записи, не происходит закрытие socket, видимо его принудительно надо закрывать, так как это ssl соединении а работаем мы с http.
Сейчас проверил, что выдает socket.waitForReadyRead(60000) “не пугайтесь это из моего гениального творения, без слотов =)” при попытке повторного чтения, и выяснил что

waitForReadyRead QAbstractSocket::UnconnectedState
waitForReadyRead "Remote host closed"

QString Sms_class::ReadSocket()
{
    out<<"MSG : Open Mode " <<socket.openMode ()<<endl;
    
    if(!socket.waitForReadyRead(60000))
        {
            qDebug() <<"waitForReadyRead"<< socket.state();
            qDebug() <<"waitForReadyRead"<< socket.errorString ();        
            return(0);
        }
    return(socket.readAll());
}


самое интересное что openMode() выдает “MSG : Open Mode 3” то есть у нас все хорошо =)

То есть нам надо будет делать socket.close(); после получения ответа от сервера.

Буду курить носки и много думать, привет анабиоз =)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

5 страниц V  « < 3 4 5
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.12.2024, 21:14