The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"бинарные данные (с++ демон и php)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"бинарные данные (с++ демон и php)"  
Сообщение от flexik (ok) on 09-Мрт-09, 06:49 
Здравствуйте,

Пишу небольшой демон на си++, который через локальные сокеты общается с пхп скриптом. На данный момент общаются они в текстовом режиме и приходится в си демоне числовые типы double, int преобразовывать в строки:


    char buf[33];
    sprintf(buf,"%d",int_total);
    std::string total_str = buf;
    bzero(buf, 33);    

все бы ничего, но данных куча. очень неудобно. хотелось бы в сокет бинарные данные посылать и получать (лучше структуру), чтобы в php части можно было бы из бинарной последовательности сформировать такую же структуру или просто такие же переменные.

не могу найти информации с примерами по этому вопросу. не понимаю:
- как считать данные после отправки? пример ищу, пусть даже если общаются две си++ программы, а еще лучше си<->сокет<->php... в php вроде бы unpack нужно использовать?
- необходимы ли какие-то преобразования до отправки? можно ли int,double или структуру присвоить к std::string и эту строку отправить через бинарный сокет?
- как получить в php структуру?

пригодится любая информация по этим вопросам, желательно на русском.. если с примерами, то можно даже на англ.

пс. в гугл не посылать, разжеванной информации нет, а упоминания бинарных данных свозятся к тому, что считать файл или картинку и отправить, но не конкретно структуру данных. чтобы потом получить эти данные в переменные...


спасибо!

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "бинарные данные (с++ демон и php)"  
Сообщение от flexik (ok) on 09-Мрт-09, 07:01 

да, и также бинарные данные нужны для сериализации. с ней тоже не совсем понятно, допустим, с чьей-нибудь помощью научусь писать и передавать простые типы через сокет (там структура данных одна и таже, при приеме/передаче обе программы заранее знаю размеры и последовательность данных, т.е. как-то по битам могут считать, но что при сериализации? вдруг от версии программы к версии изменятся типы или их станет больше в структуре чем было? тогда структура уже не годная и не может быть считана?
как быть если в структуре есть std::string, у неё ведь переменый размер.. как такая структура может быть сериализована?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "бинарные данные (с++ демон и php)"  
Сообщение от angra (??) on 09-Мрт-09, 10:42 
Сериализация в бинарный объект имеет смысл в пределах одного языка. То есть когда клиент и сервер написаны на одном языке и знают как работать с такими объектами. В случае разных языков получается грязный хак с одной из сторон. Смысла в таком немного, но если хотите, то флаг и исходники php вам в руки.
Если же делать по уму, то стоит использовать какой-то промежуточный формат, понимаемый(в смысле есть либы/модули преобразования) обоими языками, например XML/YAML/JSON. В этом случае смена языка для клиента или сервера не заставит переписывать второй компонент.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "бинарные данные (с++ демон и php)"  
Сообщение от flexik (ok) on 09-Мрт-09, 15:37 
>Сериализация в бинарный объект имеет смысл в пределах одного языка. То есть
>когда клиент и сервер написаны на одном языке и знают как
>работать с такими объектами. В случае разных языков получается грязный хак
>с одной из сторон. Смысла в таком немного, но если хотите,
>то флаг и исходники php вам в руки.
>Если же делать по уму, то стоит использовать какой-то промежуточный формат, понимаемый(в
>смысле есть либы/модули преобразования) обоими языками, например XML/YAML/JSON. В этом случае
>смена языка для клиента или сервера не заставит переписывать второй компонент.
>

спасибо, понятно, значит для обмена данными между пхп частью и си++ остается старый, геморный, текстовый вариант обмена.

а как быть с СЕРИАЛИЗАЦИЕЙ если именно речь идет о том, чтобы сериализовать данный из си++ демона в бинарный файл и потом в него же их востановить? может есть какие-то статьи хорошие или примеры в букмарках у кого-нибудь по работе с бинарными данными?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "бинарные данные (с++ демон и php)"  
Сообщение от angra (??) on 09-Мрт-09, 16:04 
http://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/....

По поводу "старый, геморный, текстовый вариант обмена", сдается неверной дорогой идете, товарищ. Либо не знаете библиотек для работы с текстом, либо помешаны на оптимизации по объему в ущерб всему остальному.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру