| 1 2 3 |
| Re[3]: сериализация данных | |
| От: | Glоbus | ||
| Дата: | 14.06.07 07:45 |
| Здравствуйте, k732, Вы писали: G>>Попробуй сделать обертку над сокетом — например наследованием от basic_streambuf и реализовав там необходимые операции. Тогда у тебя получется создавать объекты стримов и передавать их бусту. K>нету опыта, поэтому не совсем понятно как должна выглядель полная реализация наследника basic_streambuf Знач так... 1. Реализуем свой буфер для работы с сокетом.
2. Используем #include "stdafx.h" #include "SockStreamBuf.h" int main(int argc, char* argv[]) { CSockStreamBuf< char > sockBuf( "194.67.57.26", 80 ); //это коннект к mail.ru std::basic_iostream< char > stream( &sockBuf ); //создаем поток и далее работаем уже только сним std::string sData = "GET http://mail.ru/ HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\nAccept-Language: ru\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)\r\nHost: localhost\r\nProxy-Connection: Keep-Alive\r\n\r\n"; stream.write( sData.c_str(), sData.length() ); //отсылаем запрос char buf[1024] = {0}; stream.read( buf, 1024 ); //получаем ответ. return 0; } Удачи тебе, браток! |
| Re[16]: сериализация данных | |
| От: | k732 | ||
| Дата: | 14.06.07 08:23 |
| Здравствуйте, Sergey, Вы писали: S>А чтобы скомпилировалось, должен быть просто char — либо вместо std::ostream надо использовать std::basic_ostream<unsigned char> — но не факт, что последнее понравится boost::serialization. но тогда для всей этой кухни нет различий от std::ostringstream А именно от этого я хотел уйти. Ведь зачем городить было огород, если можно было просто загнать буфер в std::ostringstream ? |
| Re[16]: сериализация данных | |
| От: | k732 | ||
| Дата: | 14.06.07 08:30 |
| Здравствуйте, Sergey, Вы писали: S>А чтобы скомпилировалось, должен быть просто char — либо вместо std::ostream надо использовать std::basic_ostream<unsigned char> — но не факт, что последнее понравится boost::serialization. попробова. ему не нравится ни то ни другое |
| Re[17]: сериализация данных | |
| От: | Sergey | ||
| Дата: | 14.06.07 08:35 |
| > S>А чтобы скомпилировалось, должен быть просто char — либо вместо std::ostream надо использовать std::basic_ostream<unsigned char> — но не факт, что последнее понравится boost::serialization. > > но тогда для всей этой кухни нет различий от std::ostringstream > А именно от этого я хотел уйти. Ведь зачем городить было огород, если можно было просто загнать буфер > в std::ostringstream ? А я-то думал, что ты стрим над сокетом собирался делать Posted via RSDN NNTP Server 2.1 beta |
| Re[17]: сериализация данных | |
| От: | Sergey | ||
| Дата: | 14.06.07 08:36 |
| "k732" <57436@users.rsdn.ru> wrote in message news:2545524@news.rsdn.ru... > Здравствуйте, Sergey, Вы писали: > > S>А чтобы скомпилировалось, должен быть просто char — либо вместо std::ostream надо использовать std::basic_ostream<unsigned char> — но не факт, что последнее понравится boost::serialization. > > попробова. ему не нравится ни то ни другое Тогда показывай определение класса container_stream. Posted via RSDN NNTP Server 2.1 beta |
| Re[18]: сериализация данных | |
| От: | k732 | ||
| Дата: | 14.06.07 09:19 |
| Здравствуйте, Sergey, Вы писали: S>А я-то думал, что ты стрим над сокетом собирался делать Так я так и не понял как читадь данные из потока, если неизвестна длигга данных. Пока делаю только с дополнительным заголовком фиксированного размера |
| Re[18]: сериализация данных | |
| От: | k732 | ||
| Дата: | 14.06.07 09:21 | ||
| Оценка: | 3 (1) | ||
| Здравствуйте, Sergey, Вы писали: S>Тогда показывай определение класса container_stream. Примерно так разделил классы
Теперь парсер (попробуй у него поменять )
на
|
| Re[19]: сериализация данных | |
| От: | Sergey | ||
| Дата: | 14.06.07 10:27 |
| > Теперь парсер (попробуй у него поменять ) >
> на >
Если заодно не забыть поменять и std::basic_ostream <unsigned char> ostream (&stream); на std::ostream ostream (&stream);то все замечательно скомпилируется. По крайней мере, на MSVC 8 sp1. Posted via RSDN NNTP Server 2.1 beta |
| Re[19]: сериализация данных | |
| От: | Sergey | ||
| Дата: | 14.06.07 10:37 |
| "k732" <57436@users.rsdn.ru> wrote in message news:2545620@news.rsdn.ru... > Здравствуйте, Sergey, Вы писали: > > S>А я-то думал, что ты стрим над сокетом собирался делать > > Так я так и не понял как читадь данные из потока, если неизвестна длигга данных. > Пока делаю только с дополнительным заголовком фиксированного размера > Ну так одно другому не помеха. Просто заголовок можно передавать не 1 на всю сериализацию, а запихать его формирование в write и чтение — в read. Только это должен быть очень маленький заголовок — например, просто длина текущего пакета. Впрочем, если объем передаваемых данных невелик, можно с потоками над сокетами не заморачиваться и просто strstream'ом ограничится. Posted via RSDN NNTP Server 2.1 beta |
| Re[20]: сериализация данных | |
| От: | k732 | ||
| Дата: | 14.06.07 10:40 |
| Здравствуйте, Sergey, Вы писали: S>Если заодно не забыть поменять и std::basic_ostream <unsigned char> ostream (&stream); на std::ostream ostream (&stream);то все замечательно скомпилируется. По крайней мере, на MSVC 8 sp1. писал прям здесь, поэтому не то закоментировал. Если unsigned char, то не дружит std::basic_ostream но даже если просто char
то вот результат (компилятор тотже, но без sp1)
|
| Re[21]: сериализация данных | |
| От: | Sergey | ||
| Дата: | 14.06.07 11:22 |
>
> Это похоже что хедера какого-то не хватает. Причем не для стримов, а для сериализации. Можно попробовать скомпилировать то же просто со stringstream — думаю, будут те же ошибки. Posted via RSDN NNTP Server 2.1 beta |
| Re[22]: сериализация данных | |
| От: | k732 | ||
| Дата: | 14.06.07 15:02 |
| Здравствуйте, Sergey, Вы писали: S>Это похоже что хедера какого-то не хватает. Причем не для стримов, а для сериализации. Можно попробовать скомпилировать то же просто со stringstream — думаю, будут те же ошибки. Оказалось все проще. Нужно было поменять местами <iostream> и <fstream> при подключении. Правда не совсем понял почему. Ну да ладно. Вроде сварилось с одним варнингом. У меня все-таки есть вопрос 1. Можно ли это сделать для std::basic_ostream <unsigned char> ? Просто меня смущаем char. Боюсь будут проблеммы например с '\0' и т.п. 2. Я один раз отключал для сериалицации варнинг
Но сейчас появился еще один. Критичен ли он ? И что он опять хочет от меня
|
| Re[23]: сериализация данных | |
| От: | Sergey | ||
| Дата: | 14.06.07 18:37 |
| Здравствуйте, k732, Вы писали: K>Ну да ладно. Вроде сварилось с одним варнингом. K>У меня все-таки есть вопрос K>1. Можно ли это сделать для std::basic_ostream <unsigned char> ? Можно. Но, по всей видимости, придется инстанцировать архивы для типа unsigned char — при стандартной сборке буста они собираются только для char и wchar_t. Там есть кучка фалов с расширением ipp — придется включить их в проект и проинстацировать все шаблонные классы, на которые будет ругаться линкер. В общем, возни много, толку мало. K>Просто меня смущаем char. Боюсь будут проблеммы например с '\0' и т.п. С бинарной сериализаций никаких проблем из-за этого быть не должно. С текстовой сериализацией проблемы с нулями посреди строк будут в любом случае, независимо от того, char или unsigned char используется. А проблемы с бустовой сериализацией бывают совсем из-за другого... K>2. Я один раз отключал для сериалицации варнинг K>
K>Но сейчас появился еще один. Критичен ли он ? И что он опять хочет от меня K>
Ну это мокрософты решили что char_traits::move — функция небезопасная, ну и ругаются на эту тему. Можно просто определить макрос _SCL_SECURE_NO_WARNINGS — тогда это предупреждение (и подобные) должны пропасть. |
| Re[24]: сериализация данных | |
| От: | k732 | ||
| Дата: | 14.06.07 18:41 |
| Здравствуйте, Sergey, Вы писали: S>Ну это мокрософты решили что char_traits::move — функция небезопасная, ну и ругаются на эту тему. Можно просто определить макрос _SCL_SECURE_NO_WARNINGS — тогда это предупреждение (и подобные) должны пропасть. в самом деле помогло (но только часть ошибок)
остались
|
| 1 2 3 |