2013-02-27 7 views
1

У меня есть две программы, которые обмениваются данными через TCP/IP, обмениваясь командами и данными (соединение уже успешно выполнено). Я ищу протокол, через который я могу обмениваться командами (ASCII) и двоичными данными (float, double, int, char, wchar_t и т. Д.).Стандартный протокол передачи данных для передачи данных

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

Программа написана на C++ и Qt.

+0

@ user1929959 Прошу прощения, это не мой вопрос. Я спрашиваю, как правильно интерпретировать данные между клиентом и сервером при обмене байтами. –

ответ

1

Если вы используете Qt смотрите на QDataStreamhttp://doc.qt.io/qt-4.8/qdatastream.html

Например: http://doc.qt.io/qt-4.8/qt4-network.html

+0

Благодарим вас за ответ. QDataStream передает байты вслепую без фиксации типа. Мой вопрос в том, как клиент может узнать, какой тип данных отправил сервер. Есть ли известный протол для этого? –

+0

@SamerAfach Вам действительно нужны типы для отправки? Например, если вы отправили некоторую команду, вы знаете, что это аргументы, и вы можете напрямую читать эти типы. Можете ли вы немного рассказать о своих потребностях? – kassak

+0

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

1

Я бы предложил использовать заголовок + данные для описания такого рода сообщений. В заголовке вы можете иметь, например, поле типа сообщения и в соответствии с его значением вы можете указать содержимое данных. Я думаю, что это не так сложно реализовать. Если у вас есть это, вы можете обмениваться такими структурами, как вы хотите (например, QDataStream)

1

Если вы используете Qt, this может быть вам полезна.

В общем, вы должны выбрать побайтовый формат, а затем сериализовать и десериализовать его с каждой стороны сокета. В противном случае вы в конечном итоге столкнетесь с проблемой либо с контентом, либо с разными размерами между ОС (обычно 32-разрядная и 64-разрядная системы).

Смежные вопросы