РЧ-Ranmmbock библиотека Обзоры 3-UDP передача и прием с использованием шаблона способ 2

Часть дефекты: переменная передача и прием данных, длина

Использование другого ключевого слова текста отправки бинарным образом (все кадры протокол переплетается друг с другом в определенном порядке)

 

Ключевые слова:

Клиент посылает Binary

Клиент получает Binary

Сервер отправляет Binary

Сервер получает Binary

DMIdata в отправляемое
    [аргументы] QueryCmd} {$ $ $ {} {ExpectLen ExpectData}
    [Документация] реализован метод с использованием передачи двоичного параметра $ {QueryCmd} $ {ExpectData} является шестнадцатеричным постоянная необходимость добавить 0x, $ { десятичное ExpectLen}
    $} {dataLength_Ev ознакомления с Eval ( '1. 1 + +1 к ExpectLen} {$')
    $ {dataLength_hex Преобразовать в Hex $}} {dataLength_Ev длина = 2
    $ {QueryCmd_int к Преобразовать целое} $ {16} QueryCmd
    $ {QueryCmd_hex} Преобразовать Кому Hex $ {QueryCmd_int} длина = 2
    $ {ExpectLen_hex} Преобразовать Кому Hex $ {ExpectLen} длина = 2
    $ {ExpectData_int} на Преобразовать в целое число $ {ExpectData} 16
    $ {length_hex} ознакомления с Eval ( «$ { * 2} ExpectLen «)
    $ {} ExpectData_hex ExpectData_int Преобразовать Кому Hex $ {$} = {длина} length_hex
    $ {SendMsg} Установить переменные $ {00} dataLength_hex 01520000 $ {QueryCmd_hex} $ {ExpectLen_hex} $ {ExpectData_hex} и далее
    $ {SendMsg_by} Преобразовать в байтах $ {} SendMsg шестигранной
    Клиент посылает Binary $ {} SendMsg_by имя = dmiclient

Примечания:

1. Из-за параметрами теста, проходящего единство, статья отображает входные параметры передаются 0x шестнадцатеричными, поэтому интерфейс передается во время, мы также должны быть унифицированы, но не требует конкатенации префикса 0x , поэтому необходимо удалить с помощью преобразования 0x

2. После конкатенации к длине 2 шестнадцатеричным, мы должны быть преобразованы Преобразовать в байтах в байтах \ x01 ситуации для отправки, в противном случае это будет ошибкой

3. Такие socketTool отображаются в шестнадцатеричном режиме

Отправить он закончил ~ ~ ~

Получение информации

Послание DMIdata приема
    [аргументы] $ {QueryCmd} $ {таймаут}
    [Документация] должно быть получено обратно строку данных, параметр $ {QueryCmd} шестигранный с 0x
    ... если прямой выход шестнадцатеричное 00, она будет казаться пустой, не может быть разобрано
    ... так что данные отправлены обратно в претензии формате DMI строки
    ... ручки
    ... 1. Сравнительные ли переданные возвращаемые данные , совпадает с номером команды (0x00)
    . .. 2. Сравнительные данные возвращаются 05
    ... возвращает значение ошибки 3. Печать
    $} = {Клиент RevMsg получает Binary имя = dmiclient таймаута = тайм - аут} $ {
    $ {} RevMsg_1 ознакомления "." Соединить ([ '$ {RevMsg}' [2 * I: 2 * (I + 1.)] для I в диапазоне (LEN ( '$ {RevMsg}') / 2)])
    $ {RevMsg_2} ознакомления '$ {RevMsg_1}'. Разделение ( "")
    $ {} Int Кому Преобразовать целое RevMsg_2} {$ [. 7] 16
    $ {проклясть Преобразовать в шестнадцатиричное $ {}} INT = 0x длина префикса = 2
    $ {$ Ве Равное Должен ли QueryCmd} {} шестигранной
    Если Ве Равное RevMsg_2} {$ [6] . 05
    Журнал Специфическая ошибка печати Возвращаемое значение: $ {RevMsg_2} [7: ]

Примечания:

1. Потому что, если нормальное программное обеспечение для отправки шестнадцатеричных данных я нашел 00, получив это ключевое слово непосредственно появляется пустым, проверяется, ключевым словом принятых данными, полученный в соответствии с кодом ASCII, при получении Null Byte время не получит, это на самом деле этот метод не подходит. Временное решение позволяет разработчикам непосредственно вернуть строку мне непосредственно проверить строку

2. строка получена, она должна быть разделена, и принимает значение, соответствующее положению, чтобы проверить

 

 

Преимущества: Нет необходимости разрабатывать протоколы, шаблоны

Трудности: конкатенация (входные параметры, требуемые различным способом передавать различные преобразования, необходимые)

Точка Тошноты: ASCII код получен, если получены 00 шестнадцатеричных данных непосредственно пусто, который принимает нулевые байты, не может быть декодирован (рвота крови)

 

рекомендация

отwww.cnblogs.com/xiaodouzhou-123/p/11202093.html