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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 22:23   #1
Rodeon
 
Регистрация: 27.08.2008
Сообщений: 3
По умолчанию MRA mail agent не могу разобраться с анкетами

В клиенте с этих веток:
№1
№2
№3
№4

После обработки события UserFound выдаються поля с данными.
Username, Domain, Nickname, FirstName, LastName, Sex, Birthday, Zodiac, Country_id, City_ID, Location, Phone, mrim_status, status_uri, status_title, status_desc, ua_features: String
Как видно все строковые.

Сервер передает в формате UTF-16LE

Образец поля Location от сервера:
20043E044104410438044F042C0020001C0 43E0441043A043E04320441043A0430044F 0420003E0431043B042E002C00200025043 8043C043A043804000000000800000030
и его интерпретация, в этом проблеммы нету:
Россия, Московская обл., Химки

Тоже самое для поля status_title:
210447043004410442044C0435042000350 4410442044C0421002000180420002F0420 00350433043E04200037043D0430044E043 A00290029002900
Должно быть на выходе вот это:
Счастье есть! И Я его знаю ))
А у меня получаються только ?????? (причем вопросительных знаков в 2 раза меньше чем должно быть символов).

Поля получаем с сервера одной и той-же функцией:
Код:
          Location:= MMP_GetLPS(@Pack, Data, Offset);
          status_title:= MMP_GetLPS(@Pack, Data, Offset);
кодировка одинаковая, почему так получаеться кто сможет подсказать?

Для еще большей наглядности приведу пакет данных получаемых с сервера, указал анкету специально где есть и подробная локация и статус длинный!

45 00 02 7A E8 23 40 00 36 06 7F 23 5E 64 BB 28 ; E..z.#@.6.#^d.(
C0 A8 01 02 07 F9 F6 CD 26 75 AC C4 F0 23 50 82 ; ........&u...#P.
50 18 00 72 64 84 00 00 EF BE AD DE 18 00 01 00 ; P.rd..........
36 13 57 75 28 10 00 00 26 02 00 00 0A 06 3C 28 ; 6.Wu(...&.....<(
07 F8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00 00 00 00 01 00 00 00 11 00 00 00 32 00 00 00 ; ............2...
88 6E 26 4F 08 00 00 00 55 73 65 72 6E 61 6D 65 ; .n&O....Username
06 00 00 00 44 6F 6D 61 69 6E 08 00 00 00 4E 69 ; ....Domain....Ni
63 6B 6E 61 6D 65 09 00 00 00 46 69 72 73 74 4E ; ckname....FirstN
61 6D 65 08 00 00 00 4C 61 73 74 4E 61 6D 65 03 ; ame....LastName.
00 00 00 53 65 78 08 00 00 00 42 69 72 74 68 64 ; ...Sex....Birthd
61 79 06 00 00 00 5A 6F 64 69 61 63 0A 00 00 00 ; ay....Zodiac....
43 6F 75 6E 74 72 79 5F 69 64 07 00 00 00 43 69 ; Country_id....Ci
74 79 5F 49 44 08 00 00 00 4C 6F 63 61 74 69 6F ; ty_ID....Locatio
6E 05 00 00 00 50 68 6F 6E 65 0B 00 00 00 6D 72 ; n....Phone....mr
69 6D 5F 73 74 61 74 75 73 0A 00 00 00 73 74 61 ; im_status....sta
74 75 73 5F 75 72 69 0C 00 00 00 73 74 61 74 75 ; tus_uri....statu
73 5F 74 69 74 6C 65 0B 00 00 00 73 74 61 74 75 ; s_title....statu
73 5F 64 65 73 63 0B 00 00 00 75 61 5F 66 65 61 ; s_desc....ua_fea
74 75 72 65 73 0F 00 00 00 77 65 6C 63 6F 6D 65 ; tures....welcome
5F 66 72 69 65 6E 64 73 07 00 00 00 6D 61 69 6C ; _friends....mail
2E 72 75 0C 00 00 00 53 00 4F 00 46 00 49 00 4B ; .ru....S.O.F.I.K
00 4F 00 0C 00 00 00 53 00 4F 00 46 00 49 00 4B ; .O.....S.O.F.I.K
00 4F 00 02 00 00 00 49 00 01 00 00 00 32 0A 00 ; .O.....I.....2..
00 00 31 39 38 37 2D 30 34 2D 33 30 01 00 00 00 ; ..1987-04-30....
32 04 00 00 00 32 38 31 37 04 00 00 00 32 38 31 ; 2....2817....281
37 70 00 00 00 20 04 3E 04 41 04 41 04 38 04 4F ; 7p... .>.A.A.8.O
04 2C 00 20 00 14 04 30 04 3B 04 4C 04 3D 04 35 ; .,. ..0.;.L.=.5
04 32 04 3E 04 41 04 42 04 3E 04 47 04 3D 04 4B ; .2.>.A.B.>.G.=.K
04 39 04 20 00 24 04 1E 04 2C 00 20 00 1F 04 40 ; .9. .$..,. ..@
04 38 04 3C 04 3E 04 40 04 41 04 3A 04 38 04 39 ; .8.<.>.@.A.:.8.9
04 20 00 3A 04 40 04 30 04 39 04 2C 00 20 00 14 ; . .:.@.0.9.,. .
04 30 04 3B 04 4C 04 3D 04 35 04 33 04 3E 04 40 ; .0.;.L.=.5.3.>.@
04 41 04 3A 04 00 00 00 00
08 00 00 00 30 30 30 ; .A.:.........000
30 30 30 30 34 09 00 00 00 73 74 61 74 75 73 5F ; 00004....status_
31 34 34 00 00 00 2F 04 20 00 42 04 43 04 42 04 ; 144.../. .B.C.B.
20 00 13 04 1B 04 10 04 12 04 1D 04 2B 04 19 04 ; .........+..
20 00 3F 04 3E 04 20 00 1A 04 1E 04 1D 04 24 04 ; .?.>. ....$.
15 04 22 04 10 04 1C 04 21 00 00 00 00 00
08 00 ; ."....!.......
00 00 30 30 30 30 30 30 35 34 ; ..00000054

Зеленым цветом выделил Location - там текст - "Россия, Дальневосточный ФО, Приморский край, Дальнегорск"
Синим цветом выделил status_title - там текст - "Я тут ГЛАВНЫЙ по КОНФЕТАМ!"

Но в самом клиенте работает только Location?
Вложения
Тип файла: rar client.rar (15.0 Кб, 8 просмотров)
Rodeon вне форума Ответить с цитированием
Старый 31.01.2012, 01:31   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

ай ай ай... компоненты =) А ничего что MRA меняет протокол.. вносит изменения...
А компонент этого не учитывает..
Человек_Борща вне форума Ответить с цитированием
Старый 31.01.2012, 08:04   #3
Rodeon
 
Регистрация: 27.08.2008
Сообщений: 3
По умолчанию

Протолок меняется, но не так сильно. Основные функции остались прежними. Да и вопрос был не в этом!
Rodeon вне форума Ответить с цитированием
Старый 31.01.2012, 11:55   #4
Coprikiytam
Новичок
Джуниор
 
Аватар для Coprikiytam
 
Регистрация: 26.01.2012
Сообщений: 1
По умолчанию

I found it useful!Great information!
Coprikiytam вне форума Ответить с цитированием
Старый 31.01.2012, 12:04   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

ТС, вам следует смотреть в корень проблемы.
То, что где-то нашли готовые модули/компоненты ещё не значит что они 100% рабочие и отлажены на все случаи жизни...
Код:
MMP_GetLPS(@Pack, Data, Offset);
ставьте бряк, и тыкайте f7... дальше отлаживайте программу.

И мб строка статуса в юникоде.

Последний раз редактировалось Человек_Борща; 31.01.2012 в 12:07.
Человек_Борща вне форума Ответить с цитированием
Старый 31.01.2012, 13:38   #6
Rodeon
 
Регистрация: 27.08.2008
Сообщений: 3
По умолчанию

Что значит где-то!? Нашел я в далеком 2008 году, и уже 3 года дорабатываю что могу, что бы соответствовало новым версиям протокола!
То, что строка передается в юникоде я указал в первом посте -
Цитата:
Сервер передает в формате UTF-16LE
Как видно из приведенного куска ответа от сервера, где выделенно зеленым и синим оба параметра одинаковой кодировки.
Они преобразуются в нормальный вид так:

Код:
var
  s: string;
  i: integer;
  p: array of byte;
  n: integer;
begin
  s := edit17.Text;
  n := Length(s) div 2;
  SetLength(p, n);
  for i := 0 to n - 1 do // превращаем строку в массив байт
    p[i] := StrToInt('$' + copy(s, i*2+1, 2));
  s := PWideChar(@p[0]); // превращаем массив байт в строку просто приравнивая WideString
причем обе строки будут из этих:
20043E044104410438044F042C0020001C0 43E0441043A043E04320441043A0430044F 0420003E0431043B042E002C00200025043 8043C043A043804000000000800000030
и
210447043004410442044C0435042000350 4410442044C0421002000180420002F0420 00350433043E04200037043D0430044E043 A00290029002900
получим вот эти:
Россия, Московская обл., Химки
и
Счастье есть! И Я его знаю ))

но в модуле это не работает, почему я просил, может есть заинтересованный люди - которые посмотрят и подскажут, что не так.
Либо BOBAH13 заглянет в ветку и что-то ответит, так как он автор, но я не могу ему написать!

Последний раз редактировалось Rodeon; 31.01.2012 в 13:43.
Rodeon вне форума Ответить с цитированием
Старый 31.01.2012, 14:12   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Окей.. цитирую описание прротокола http://help.mail.ru/agent-help/developers/description
Цитата:
MMP - протокол соединения Mail.Ru Агента с общей сетью Mail.Ru. Рекомендованный для соединения сервер в любой момент времени можно получить в текстовом формате iport по адресу mrim.mail.ru:2042 и mrim.mail.ru:443. Взаимодействие с сервером происходит поверх постоянно установленного tcp-соединения посредством асинхронного обмена командами. Инициатором установления соединения может быть только клиент, команды могут посылаться как клиентом, так и сервером.

MMP бинарный протокол. Все числовые данные передаются как четырехбайтные целые НЕ в сетевом формате, т. е. первым идет младший байт, последним старший. Четырехбайтовые беззнаковые целые обозначаются UL.

Текстовые данные передаются с префексированной длиной, т. е. сначала UL, а потом строка (в кодировке windows-1251) длины UL без завершающего нуля. Обозначение в дальнейшем - LPS
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mail agent отправка пакета sanek99 Работа с сетью в Delphi 4 13.02.2011 11:52
Mail Agent doniyor Работа с сетью в Delphi 5 29.04.2010 08:03
работа с компонентом mail.ru agent D_E_N Работа с сетью в Delphi 1 19.12.2009 20:09