Russian Qt Forum

Qt => Работа с сетью => Тема начата: deMax от Сентябрь 04, 2014, 07:47



Название: Сетевое взаимодействие между qt и boost
Отправлено: deMax от Сентябрь 04, 2014, 07:47
Есть клиентское приложение в Qt, есть серверное на c++ (boost). Как организовать между ними обмен данных?
Данные (массивы, файлы, структуры), объем данных не большой, но клиентское приложение вообще не работает без серверного.


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: Bepec от Сентябрь 04, 2014, 08:50
Эммм... Буст и Qt это лишь библиотеки C++... Как наладить обмен данных между c++ и c++ приложением - посмотреть что передаёт сервер и написать клиент под его протокол.


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: deMax от Сентябрь 04, 2014, 09:10
Эммм... Буст и Qt это лишь библиотеки C++... Как наладить обмен данных между c++ и c++ приложением - посмотреть что передаёт сервер и написать клиент под его протокол.
Пишется и сервер и клиент.
Как между ними организовать связь? Сервер скорее всего будет под Linux, вроде оптимально использовать boost::asio. Клиент под win7 на qt(возможно, опционально будет и linux, благо qt позволяет).

Вот я и думаю, сделать библиотеку обмена на boost::asio и прикрутить к клиенту и серверу, или qtcpsocket сможет с asio работать, или есть другие хорошие решения? Передачу файлов для обновления программы(отдельное приложение) через ftp сделать или тем же способом что и передачу данных?


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: Bepec от Сентябрь 04, 2014, 09:13
Как вы сделаете так и будет. передаваться будут те же байты.


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: navrocky от Сентябрь 04, 2014, 09:49
Если объем данных не большой, то лучше использовать текстовый протокол, к примеру, JSON (https://ru.wikipedia.org/wiki/JSON-RPC). Его легко отлаживать и документировать.

Если большой объем, то гнать в бинарном виде. Способ сериализации конечно тут зависит от самих данных. Если это некие файлы, видео, аудио-потоки, то надо их гнать в сыром виде по сокету. Если структуры, то для их сериализации, видимо, придется использовать сериализацию из boost на обоих сторонах. Также можно посмотреть в сторону google protobuf или apache thrift для организации эффективного RPC.


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: vizir.vs от Сентябрь 04, 2014, 13:09
А нафига городить несколько вариантов общения по одному и тому же протоколу? Написать либу, которая будет отвечать за прием/передачу данных. Проще же будет


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: deMax от Сентябрь 04, 2014, 13:14
А нафига городить несколько вариантов общения по одному и тому же протоколу? Написать либу, которая будет отвечать за прием/передачу данных. Проще же будет
Как вариант я рассматриваю, только сервер boost, клиент Qt, еще и ОСи разные.

Объем небольшой, в основном фоновый режим, нагрузка килобайты в секунду.
Какие библиотеки/классы использовать?


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: Old от Сентябрь 04, 2014, 13:22
Какие библиотеки/классы использовать?
Возьмите msgpack (http://msgpack.org).


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: deMax от Сентябрь 04, 2014, 14:01
Возьмите msgpack (http://msgpack.org).
Спасибо, посмотрю.

А если на сервере использовать boost::asio, то на клиенте тоже boost::asio или можно чем то еще обойтись? Хотелось бы использовать популярное решение.


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: Old от Сентябрь 04, 2014, 14:27
А если на сервере использовать boost::asio, то на клиенте тоже boost::asio или можно чем то еще обойтись? Хотелось бы использовать популярное решение.
Да как вам будет удобно.
msgpack небольшая библиотека, позволяющая кодировать и декодировать пакеты данных. А чем вы эти пакеты будете пересылать ей все равно.


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: vizir.vs от Сентябрь 04, 2014, 14:42
А нафига городить несколько вариантов общения по одному и тому же протоколу? Написать либу, которая будет отвечать за прием/передачу данных. Проще же будет
Как вариант я рассматриваю, только сервер boost, клиент Qt, еще и ОСи разные.

Объем небольшой, в основном фоновый режим, нагрузка килобайты в секунду.
Какие библиотеки/классы использовать?
boost:asio вполне норм. Зачем переделывать, если уже все есть?!


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: navrocky от Сентябрь 05, 2014, 09:41
Какие библиотеки/классы использовать?
Возьмите msgpack (http://msgpack.org).
По описанию хорошая штука, даже поддерживается cmake. Спасибо за наводку.


Название: Re: Сетевое взаимодействие между qt и boost
Отправлено: Old от Сентябрь 05, 2014, 10:19
По описанию хорошая штука, даже поддерживается cmake. Спасибо за наводку.
Она и в использовании хороша: легко встраивается и имеет кучу биндингов для разных языков.