Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > алгоритм протокола взаимодействия


Автор: GWTMain 20.4.2010, 12:52
Нужно организовать протокол передачи параметр=ключ
Щас как делаю, по tcp/ip с сервера шлю команды а на клиенте их парсю и вызываю нужные функции
к примеру так
Код

position_app
150,300
end

т.е. position_app команда(положение приложения)
150,300 соответственно координаты
и end  передача оконченна, т.е. выполнить
Но как то это не красиво, что можно придумать изящнее?

Автор: Akina 20.4.2010, 14:12
Цитата(GWTMain @  20.4.2010,  13:52 Найти цитируемый пост)
это не красиво

Чем именно?

Цитата(GWTMain @  20.4.2010,  13:52 Найти цитируемый пост)
что можно придумать изящнее?

Ну давай подумаем.
Имя передавать надо? надо. Значение передавать надо? надо. Маркер окончания передачи нужен? нужен. Местами поменять их можно? я бы не стал.
Вывод - от добра добра не ищут.

Автор: GWTMain 20.4.2010, 14:29
Цитата(Akina @  20.4.2010,  14:12 Найти цитируемый пост)
Имя передавать надо? надо. Значение передавать надо? надо. Маркер окончания передачи нужен? нужен. Местами поменять их можно? я бы не стал.


Мммм, думал может есть другое, написал свое и попал в точку=)

Автор: Akina 20.4.2010, 14:34
Цитата(GWTMain @  20.4.2010,  15:29 Найти цитируемый пост)
думал может есть другое

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

Автор: Artemon 20.4.2010, 17:30
объяви структуру

struct SPack
{
     BYTE IdCmd;
     BYTE Key;
     BYTE Val;
};


И передавай ее в бинарном виде.

Плюсы:
1. Размер всего 3 байта.
2. избавились от маркера конца.

Автор: Akina 20.4.2010, 17:40
А если оно не лезет в байт?
А как проверять целостность переданных данных?

Автор: Artemon 20.4.2010, 19:35
Цитата

А если оно не лезет в байт?


Ответ очевиден - используем WORD.

Цитата

А как проверять целостность переданных данных?


А зачем ? Если мы считали структуру, то можно с уверенностью сказать, что данные в ней не битые, не перемешанные и т.д.


Автор: Akina 20.4.2010, 20:36
Цитата(Artemon @  20.4.2010,  20:35 Найти цитируемый пост)
Ответ очевиден - используем WORD.

а не лезет в word - берём dword... а если надо передать полсотни байтов - чешем репу?

Цитата(Artemon @  20.4.2010,  20:35 Найти цитируемый пост)
можно с уверенностью сказать

а ты смелый...

Автор: GWTMain 21.4.2010, 07:11
Artemon, 
Akina, 
А эта структура разными языками поддерживается, или могут быть подводные камни?

Автор: Artemon 21.4.2010, 07:25
Цитата

а не лезет в word - берём dword... а если надо передать полсотни байтов - чешем репу?


Я исхожу из задачи и данных, которые показал топикстартер.

Цитата

а ты смелый...


 smile 

Цитата

Artemon, 
Akina, 
А эта структура разными языками поддерживается, или могут быть подводные камни?


В C,C++,C# структуры есть. в Delphi насколько я помню тоже есть подобие структуры, только называется Record (могу ошибаться).

Автор: Akina 21.4.2010, 07:47
Структуры или аналог есть почти во всех языках. Но увы - они не сильно совместимы между семействами, если не принимать доп. мер.

Цитата(Artemon @  21.4.2010,  08:25 Найти цитируемый пост)
Я исхожу из задачи и данных, которые показал топикстартер.

Он не показал пример данных типа
Код

Window_Status
Processing data...
end

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)