Название: Организовать межпроцессный обмен данными Отправлено: xwicked от Июнь 17, 2015, 22:39 Привет!
Есть одна программа-интерфейс к другой программе-ядру. Ядро - консольное приложение, которое запускается с определёнными параметрами и выполняет весь функционал. Как организовать двухстороннюю передачу данных? Стандартные потоки передают текстовую информацию с искажениями. Загружая например html-файл в unicode, из ядра передаётся интерфейсу двухбайтовая html'ка полностью, то есть браузер уже не может правильно отображать полученные данные. Частичный код интерфейс: Код Ядро: Код Пробовал так QTextStream cout(stdout); и сжимать и кодировать в Base64 всё равно данные искажаются. Можно ли такой обмен настроить или использовать QSharedMemory? Благодарю за ответы! Название: Re: Организовать межпроцессный обмен данными Отправлено: torwig от Июнь 18, 2015, 06:17 Что такое в Вашем понимании "искажения"? Левые данные, потеря данных, кракозябры? Вы под какой ОС запускаете? Может проблема с кодировкой? Попробуйте вывести то что отправили и то что получили как байт, например, toHex(), и сравните. Если байтики совпадают, значит все верно передает и где-то там что-то там с кодировкой. Хотя может вы уже пробовали это :)
Название: Re: Организовать межпроцессный обмен данными Отправлено: Fregloin от Июнь 18, 2015, 22:14 DBus в линукс, в винде не знаю работает или нет, так же локальные/сетевые сокеты это что из кроссплатформенного.
так же каждая ОС поддерживает свои IPC. Название: Re: Организовать межпроцессный обмен данными Отправлено: xwicked от Июнь 18, 2015, 23:33 Спасибо за советы. Я проглядел, что у меня в стандартный вывод отправляется лишняя информация типа
Код Когда к base64 приклеивался лишний текст, то он не мог правильно декодировать. Проверил всё на оффтопике, в линухе я думаю base64 будет так же нормально обрабатываться и этот способ будет кроссплатформенный. P.S. Теперь я смогу свои программы более чётко разделить на основную и интерфейс, повысив производительность основной части программы. ;) |