Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2015, 12:31   #1
375297192202
 
Регистрация: 06.05.2010
Сообщений: 5
По умолчанию Работа с результатом Socket.ReceiveText

Есть сервер (доступа к нему не имею) и клиент на Андроиде.
Обмен командами, насколько я пока понял, происходит обычной строкой с набором внутренних команд.
Например авторизация от клиента:
Цитата:
'b!'#8#1#$10#3#$18#$B'"'#3'112*'#6'1121122'#7'Android:'#3'2.3'
где: 112 - логин
112112 - пароль
Android - ну это более-менее понятно
2.3 - версия клиента

Переписываю клиента на XE10 для работы по Windows и нужно изучить протокол работы.
Эту строку (var s : string) я получил в режиме отладки (пауза и WatchLits), а вот если ее куда-нибудь выводить в состоянии "как есть" или пытаться с ней работать - она превращается в кракозябры.
Понимаю, что объяснение ситуации более чем сумбурное.
Может скриншоты помогут.
Это то, какая приходит строка:
2015-12-11 12-23-14 Project1 - Delphi 10 Seattle - Unit1 [Stopped - Thread 6900].jpg
А это, как она выглядит при любом выводе (на экран-ли, в файл-ли - без разницы):
2015-12-11 12-26-46 Form1.png
Вопрос: как же ее получить для работы именно в таком виде, в котором она приходит, т.е. со всеми ее кавычками (' или ") и диезами (#)?

Последний раз редактировалось 375297192202; 11.12.2015 в 12:36.
375297192202 вне форума Ответить с цитированием
Старый 11.12.2015, 13:05   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А она не приходит с диезами и кавычками. #8 обозначает при отображении байт с содержимым $08. Зачем для работы в таком виде получать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 11.12.2015 в 13:07.
Аватар вне форума Ответить с цитированием
Старый 11.12.2015, 13:48   #3
375297192202
 
Регистрация: 06.05.2010
Сообщений: 5
По умолчанию

Аватар, спасибо за ответ.
Цитата:
#8 обозначает при отображении байт с содержимым $08.
Но ведь он какую-то нагрузку в программе несет ... Значит для чего-то нужен. Соответственно его нужно получить для дальнейшей работы?

Цитата:
Зачем для работы в таком виде получать?
Я так понял, что в комбинации "#3'112*'#6'1121122'#7'Android:'#3' 2.3' можно составить логику:
" - символ какого-то разделения
#3 - следующие три символа полезной информации: 112 - логин
#6 - соответственно 112112 - пароль. Только вот откуда еще двойка взялась?
#7 - соответственно строка Android. Только опять лишний символ двоеточия
#3 - соответственно строка версии программы 2.3

ОК. А как Вы видите работу с отправляемыми/получаемыми данными в этой ситуации?
Может натолкнете на мысль.

p.s.: Да, и кстати - не обратил внимания, на последней картинке используется логин/пароль 222. Прошу прощения за невнимательность.

Последний раз редактировалось 375297192202; 11.12.2015 в 13:55.
375297192202 вне форума Ответить с цитированием
Старый 11.12.2015, 15:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Только вот откуда еще двойка взялась?
Ты ее передаешь. Иначе это соль. Или что-то еще вставленное в пакет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.12.2015, 15:29   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Но ведь он какую-то нагрузку в программе несет
Ни какой. Нужно при парсинге проверять содержимое байтов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2015, 07:19   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

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

Чтобы отобразить эти строки почитайте о преобразовании в шестнадцетеричный вид, можно даже для себя написать простую функцию переводящую байт 08h в строку "#8" (и аналогично остальные нужные байты), если сильно нужно в этом виде.
phomm вне форума Ответить с цитированием
Старый 30.12.2015, 14:06   #7
375297192202
 
Регистрация: 06.05.2010
Сообщений: 5
По умолчанию

Хоть и немного поздно, но хочу сказать спасибо всем откликнувшимся.
Методом "ненаучного тыка" что-то более-менее стало проясняться и сейчас уже могу говорить, что результат все-таки будет )))
375297192202 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Socket в Си gnomik13071992 Qt и кроссплатформенное программирование С/С++ 0 19.05.2012 10:32
NetPaint, работа с Socket-ми ИВэТэшка Общие вопросы Delphi 1 07.02.2012 11:53
Socket.Receivetext() и разделение текста Максим139 Помощь студентам 0 24.04.2011 13:51
Работа с сокетами (Socket.Data) SanekIrk Работа с сетью в Delphi 3 23.05.2010 16:12
Работа с Socket-ом c помощю WinAPI 69 region Помощь студентам 13 11.04.2008 17:22