Перейти к содержанию
Симферопольский Форум

Telnet - увидеть данные в двоичном коде.


FreeLSD

Рекомендуемые сообщения

Возникла такая вот потребность. Работаю с устройством, протокол которого описан в двоичном виде. Телнет же и все компоненты, которые я знаю, возвращают символьную строку. Если её просто перевести в двоичную форму (через коды символов), результат получается, мягко говоря, не совсем соответствующий описанию. При этом видно, что частично всё же получается то, что ожидал, частично же - какая-то пурга. Хочу увидеть, что же говорит система сразу в двоичном виде, потому что подозреваю "испорченный телефон" при преобразованиях туда-обратно. Вот только не могу найти, каким способом это сделать. Задача - подключиться на нужный адрес/порт, отправить туда определённое значение и получить двоичный ответ. Гугление дает массу вопросов на эту тему и что-то совсем не даёт ответов :unsure: То ли я не так спрашиваю, то ли действительно проблема...
Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Может все таки шеснадцатиричный?

 

Надо написать программу работающую с сокетами. Простейший вариант на php.

 

Или возможно

http://the.earth.li/~sgtatham/putty/0.61/htmldoc/Chapter3.html#using-rawprot

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

Не, там именно двоичный и протокол описан на уровне битов. Приходят, естессно, байты. Причем и телнет, и компонента, которой я пользуют, эти байты показывает в виде строки. Вот последний пример: компонента говорит, что пришло 5 байт. И показывает мне строку из 10 символов! То есть, видимо, значение этих байтов не позволяет нормально преобразовать их в символьную строку. Само собой, если я начинаю перегонять их обратно в двоичный код, получаю фигню. Мне бы увидеть один в один что пришло.

P.S. использую mswinsck.ocx.

Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

Проблема в том что байты преобразовываются в символы с помощью таблицы соответствия

 

Win-1251, koi-8 типа того.

 

Байты они не читаемы.

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

А, нет, погорячился. Со строкой все правильно, только от этого не легче.

Описание протокола: приходит 5 байт.

Компонента говорит, что приходит 5 байт.

Показывает строку "Ђ› "

Получаю коды символов: 1026 4 8250 0 0

Перевожу их в двоичный вид: 10000000010 00000100 10000000111010 00000000 00000000

Ну и какие же это байты? Длина должна быть 40 бит.

Кстати, в строке не все символы отобразились как есть, браузер, похоже, не умеет.

Изменено пользователем FreeLSD
Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Проблема в том что байты преобразовываются в символы с помощью таблицы соответствия

Я понимаю, что проблема именно в этом. Но я не могу заставить 1С читать коды символов в чем-то кроме юникода. И вообще не представляю, как их выдает компонента. Поэтому мне бы избежать всяких преобразований вообще. Понятно, что можно взять и наваять что-то самому. Но зачем изобретать велосипед, наверняка же такая задача возникала уже в истории человечества :)

Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Дюже древняя утилита.

 

Использовaние клиента Telnet в качестве транспорта для бинарных файлов невозможно из-за спeцифики протокола (более подробно в RFC854 про ). Поэтому без потерь мoжно передавать файлы, содержащие стандартный набор ASCII-символов.

https://xakep.ru/2013/11/25/61645/

 

Т.е. устройство сетевое и у нее есть какой-то открытый порт ?


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Ссылка на комментарий
Поделиться на другие сайты

Можно расписать максимально подробно, что куда передаётся чем принимается и как обрабатывается.

 

Хорошо заданный вопрос уже 50% ответа

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

Ну вот то, что я знаю/понимаю:

1. Устройство (весы). Имеет IP-адрес, слушает на определенном порту. Принимает запрос и возвращает 5 байт.

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

3. Компонента mswinsck.ocx, получив эти 5 байт, выдает их в виде строки (т.е. байты уже преобразованы в символы). Попытка преобразовать и обратно хотя бы в 16ричный код дает иногда нормальный, иногда странный результат. Putty видит все как надо, хоть и в 16ричном, а не двоичном виде.

Так что проблема все-таки в преобразовании значения в символ.

Вывод: с используемой компонентой вряд ли можно добиться нормального результата, хотя бы потому, что принципы "озвучивания" ею байтов не ясны.

Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Можно послушать этот аппарат с помощью Wireshark.

Вот пример - видим в телнет 4 символа, а в реальности их 7.

Wireshark.png


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Ссылка на комментарий
Поделиться на другие сайты

Собственно, послушать уже получилось. Видно, что даже в шестнадцатиричном виде там все норм. Проблема начинается в том месте, когда компонента пытается сделать из этого строку. Поэтому теперь вопрос стоит так: а неужели вообще никому никогда не нужно было видеть "приход" как есть, без дурацкого перевода? :facepalm: Потому что найти такую компоненту пока не удалось, хоть сам садись пиши.
Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

FreeLSD, а как он управляющие символы в строку слепит? https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B


Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов

Ничего не делается к лучшему © Борис Раушенбах

Люди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский

Ссылка на комментарий
Поделиться на другие сайты

Там мне строка и не нужна. Мне нужен сам байт, как есть, пусть как Putty делает, в шестнадцатиричном виде хотя бы. Вот компонента для COM порта, популярная у 1сников, это умеет. А для TCP - ничего пока не нашел.
Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Пытаюсь понять логику, по которой образуется строка.

Пример: Putty показывает байт A8. mswinsck передает в 1С его в виде буквы "Ё". 1С определяет, что код этого символа - 1025 (десятичный). Но это не соответствует шестнадцатиричному! Вот и возникает проблема.

Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

А как компонента работает? Это activex библиотека? Она подключается к 1с? И какие есть варианты её заменить?

 

Как выглядит запрос?

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

Какие способы приёма данных поддерживает 1с? Http?

Подключаем Оптический гигабитный интернет в Симферополе и районе.

+79787647406

http://lugovoe.su

Ссылка на комментарий
Поделиться на другие сайты

Как работает компонента, понятия не имею )

Это ActiveX бибилиотека, часть Visual Studio, насколько я знаю. Файл mswinsck.ocx. 1Сники часто его используют, посколльсу стандартный, легкодоступный и легкоприменяемый.

К 1С подключается как обычный ActiveX компонент.

До сих пор проблем с ней не было, это первый случай. Да и то не факт, что именно с ней проблема, возможно, проблема в разных таблицах символов.

На что заменить, не знаю, вот и ищу.

1С поддерживает кучу способов обмена, вот только TCP/IP среди них почему-то и нет. Почему и приходится рассчитывать на внешние компоненты.

Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

hex A8 = dec 168

Набираю ALT+168, получаю "¨". Почему-то компонента передает "Ё"

Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Возник вопрос: а если там действительно разные таблицы кодирования?

В Юникоде символ с кодом A8 - это http://www.fileformat.info/info/unicode/char/a8/index.htm.

Можно ли как-то быстро определить, в какой существующей таблице этот код соответствует символу http://www.fileformat.info/info/unicode/char/0401/index.htm?

Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Всё правильно Вы написали - ALT + 0168

в английской раскладке - "¨". в русской - "Ё"

То есть один и тот же код можно представить по-разному,

а способ представления (в данном случае) зависит от свойств шрифта компонента отображения.

Ссылка на комментарий
Поделиться на другие сайты

Ну тут речь-то не о визуальном представлении. Компонента передает строку, сформированную символами, полученными из определенных кодов. 1С получает эту строку и вот тут начинается интересное. Насколько я понимаю, строка передается в виде кодов символов. Символ с кодом 168, который в английской раскладке = "¨", отображается в 1С как "Ё". Но меня-то интересуют именно коды. И вот код этого символа, когда я его получаю, равен уже 1025. Более того, если я прямо в отладчике 1С пишу ALT + 0168, вижу "¨", если ALT + 1025 - "Ё". Получается, компонента виновата? Но она не знает ничего о раскладках, а 1С использует ту же системную.
Или что-то случилось, или одно из двух.
Ссылка на комментарий
Поделиться на другие сайты

Не надо переводить полученный байт в символ, надо использовать кодовое представление этого байта. В 7-ми битной таблице ASCII первые два столбца - неотображаемые управляющие коды !

 

Таблица ASCII создавалась для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды для управления устройством телетайп

Не любо - не слушай, а врать не мешай !

"Величайшей ошибкой было бы думать, " © В. И. ЛЕНИН ПСС том 34, стр. 244.

", было бы величайшей ошибкой думать," © В. И. ЛЕНИН ПСС том 42, стр. 74.

"поругаешь власть — попадаешь под закон об оскорблении, похвалишь власть — попадаешь под закон о фейковых новостях" © В. Матвиенко

Ссылка на комментарий
Поделиться на другие сайты

Напишите немножко отладочного кода:

не берите от компоненты строку из N байт, а

примите N однобайтных переменных, которые объявите не

как строковые, а как числовые и посмотрите что получили.

 

Не будучи знакомым с языком, на котором Вы всё это пишете,

не могу выразиться более точно .....

Ссылка на комментарий
Поделиться на другие сайты

Ну тут речь-то не о визуальном представлении. Компонента передает строку, сформированную символами, полученными из определенных кодов. 1С получает эту строку и вот тут начинается интересное. Насколько я понимаю, строка передается в виде кодов символов. Символ с кодом 168, который в английской раскладке = "¨", отображается в 1С как "Ё". Но меня-то интересуют именно коды. И вот код этого символа, когда я его получаю, равен уже 1025. Более того, если я прямо в отладчике 1С пишу ALT + 0168, вижу "¨", если ALT + 1025 - "Ё". Получается, компонента виновата? Но она не знает ничего о раскладках, а 1С использует ту же системную.

168 - Кодировка Windows ANSI (cyr) однобайтовая - Ё.

0х401 = 1025(дес) Юникод двухбайтовый - Ё.

 

Нужна таблица преобразования ANSI -> Unicode?

 

вернее, наоборот, из Unicode -> ANSI -> (byte-code)?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

Чат

Чат

Please enter your display name

×
×
  • Создать...