Понимание протоколов - PullRequest
0 голосов
/ 23 мая 2010

ребята, здесь нужно немного понимания.Я знаю определение протокола, так как быть новичком в этом программировании на С ++ - довольно сложная задача. Я создаю многопоточный чат с использованием SDL / C ++, для меня это опыт обучения, и теперь я столкнулся с проблемой, в которойМне нужно преодолеть, но понять это немного сложнее, чем я думал. Мне нужно сделать какой-то протокол чата, я думаю ... но это пень.До этого момента я отправлял сообщения в виде строк символов. Теперь, когда я улучшаю приложение до такой степени, что клиенты могут зарегистрироваться и войти в систему, мне нужен лучший способ общения с моими клиентами и сервером.

благодарювы.

1 Ответ

0 голосов
/ 23 мая 2010

Создание объектов, представляющих сообщение, затем сериализация объекта, отправка его по сети, а затем десериализация на другом конце.

Например, вы можете создать класс с именем LoginMessage, который содержит два поля. Один для имени пользователя, а другой для пароля. Чтобы войти, вы должны сделать что-то вроде:

LoginMessage *msg = new LoginMessage();
msg->username = "Fred";
msg->password = "you'll never guess";

char *serialized_msg = serialize(msg);

// send the bytes over the network

Вы бы сделали нечто подобное на другом конце, чтобы преобразовать поток байтов обратно в объект.

Существуют API для создания объектов сообщений и их сериализации. Вот два популярных. Оба должны соответствовать вашим потребностям.

Буферы протокола от Google
Комиссионные По Facebook

Если вы хотите, чтобы сериализованные сообщения были читаемыми, вы можете использовать YAML . У Google есть API под названием yaml-cpp для сериализации данных в формат YAML .

UPDATE:

Эти API предназначены для создания вашего собственного протокола. Они просто обрабатывают преобразование сообщений из формы объекта в форму потока байтов. Они имеют функцию для фактической передачи сообщений по сети, но вам не нужно использовать эти функции. Как вы разрабатываете свой протокол это до вас. Но если вы хотите создавать сообщения вручную, вы можете сделать это тоже.

Я дам вам несколько идей по созданию собственного формата сообщения.

Это один из способов сделать это.

Первые 4 байта сообщения представляют длину сообщения в виде целого числа без знака. Это необходимо, чтобы выяснить, где заканчивается одно сообщение и где начинается следующее. Вам нужно будет выполнить преобразование между порядком байтов хоста и сети при чтении и записи в / из этих четырех байтов.

Пусть 5-й байт представляет тип сообщения. Например, вы могли бы использовать 1, чтобы указать запрос входа в систему, 2, чтобы указать ответ входа в систему, и 3, чтобы указать сообщение чата. Этот байт необходим для интерпретации значения оставшихся байтов.

Оставшиеся байты будут содержать содержимое сообщения. Например, если бы это было сообщение для входа, вы бы как-то закодировали имя пользователя и пароль в эти байты. Если это сообщение чата, эти байты будут содержать текст чата.

...