Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [boost.asio] boost::asio::streambuf to string 
V
    Опции темы
n4ela
Дата 15.8.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Доброго времени суток. Возник следующий вопрос по boost\у.
Ответ от сервера храню в переменной типа boost::asio::streambuf
Получаю его так:
Код
boost::asio::streambuf response;
while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
    {
        std::cout << &response;
    }

Ответ получается по частям, мне надо объединить весь ответ в строку и уже с ней работать.
Как преобразовать эти два типа, не нашел.
Единственное что, где то наткнулся что можно так:
Код
while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
    {
        std::istream istr(&response);
        istr >> tempStr;
        str += tempStr;
    }

tempStr и str - string
Но не работает, на выходи я получаю либо пустую строку, либо первую строчку ответа.

Это сообщение отредактировал(а) n4ela - 25.9.2009, 00:08
PM MAIL   Вверх
vinick
Дата 16.8.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Цитата(n4ela @  15.8.2009,  18:46 Найти цитируемый пост)

while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
    {
        std::istream istr(&response);
        istr >> tempStr;
        str += tempStr;
    }


operator >> для строк читает до первого пробельного символа, т.е ты тут читаешь только первое слово. Надо тогда организовывать внутренний цикл и вычитывать в нем все содержимое response, но тогда при использовании >> будут утеряны внутренние пробелы.  
PM MAIL ICQ Jabber   Вверх
n4ela
Дата 16.8.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



То есть не какой встроенного метода, для преобразование в string вообще не предусмотрено?
И придется городить костыли, по типу: "пока не считан весь ответ istr >> tempStr; tempStr += " ";"
А как тогда можно присвоит istr значение response. т.е. если std::istream istr(&response); объявленно до цикла?
istr = &response
istr = response
Так вроде нельзя.
PM MAIL   Вверх
vinick
Дата 16.8.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Цитата(n4ela @  16.8.2009,  09:46 Найти цитируемый пост)
И придется городить костыли,

Не используйте streambuf и не надо будет ничего городить.

PM MAIL ICQ Jabber   Вверх
n4ela
Дата 16.8.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



А чем его можно заменить, я так понимаю сразу в string считывать нельзя.
http://www.boost.org/doc/libs/1_38_0/doc/h...rence/read.html
PM MAIL   Вверх
vinick
Дата 16.8.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Цитата(n4ela @  16.8.2009,  13:55 Найти цитируемый пост)
А чем его можно заменить, я так понимаю сразу в string считывать нельзя.

Сложно что-либо советовать не зная специфики твоего протокола. В read можно подсунуть vector<char> или просто char[]. Но детали зависят от твоего протокола.
PM MAIL ICQ Jabber   Вверх
n4ela
Дата 16.8.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Что бы юзать vector<char> надо точно знать размер ответа с сервера, а как это узнать я не в курсе.
Вот код http://paste.org.ru/?s7yyx0
Мне надо просто получить ответ с сервера и уже работать с ним как с текстом. Каким способом это будет реализовано мне принципе все равно.

PM MAIL   Вверх
vinick
Дата 17.8.2009, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Цитата(n4ela @  16.8.2009,  19:43 Найти цитируемый пост)
Вот код 

А почему бы не поступить так же как в примере sync_client.cpp и использовать read_until ?
PM MAIL ICQ Jabber   Вверх
n4ela
Дата 17.8.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Спасибо большое, сам сразу не догадался. Через read_until все получилось.
PM MAIL   Вверх
andrew_121
Дата 18.8.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



n4ela, Если ответ получен, отметьте тему решенной!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.