MMP протокол, Mail.Ru Agent, бесплатные SMS

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GorYU
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 20.07.2005 (Ср) 17:03

MMP протокол, Mail.Ru Agent, бесплатные SMS

Сообщение GorYU » 16.08.2006 (Ср) 0:01

Mail.ru организовало услугу вроде icq, для общения своих клиентов.
Был создан клиент(Mail.Ru Agent), спустя какое-то время был открыт протокол(MMP) для разработчиков. Описание протокола.
Проблема в том, что нет ни одного примера общения по этому протоколу на VB, нашёл только один С, хорошего (для тех, кто 1й раз видит этот протокол) описания в i-net’e нет.
Человек, связанный с разработкой протокола и клиента, сказал, что на VB6, используя winsock реально организовать обмен с сервером.
На все мои попытки общаться с сервером в ответ только тишина, из-за не правильного использования протокола.
Для начала хотелось бы послать MRIM_CS_HELLO и получить MRIM_CS_HELLO_ACK, дальше всё должно быть более-менее просто.
Конечная цель – бесплатная отправка SMS через этот сервис.
Надеюсь у кого-нибудь получится.

То, что я пока написал:
Код: Выделить всё

'для работы кода нужна форма, TextBox по имени txtlog, Winsock имя WS, две кнопки CommandButton имена CommandButton1 CommandButton2
'--------------------------------------------------------
Option Explicit
Public ip$, port$, xDat$, stat$

Private Sub Form_Load() 'загрузка формы
txtlog.Text = "Включились" 'вывод лога действий
Command1_Click 'Узнаём, к кому сейчас лучше подключаться.
End Sub

Private Sub Command1_Click() 'Получение рекомендаций
WS.Close 'закрываем соединение на всякий случай
ip$ = "mrim.mail.ru" 'адрес
port$ = "443" 'порт
AddLog "Соединяемся с " & ip$ & ":" & port$ 'вывод лога
stat$ = "recomendacii" 'на каком этапе находимся - получаем рекомендации
WS.Connect ip$, port$ 'соединяемся для получения ip:порт сервера, с которым и должны общаться
End Sub

Private Sub Command2_Click() 'Соединение с рекомендованным сервером
WS.Close 'закрываем
AddLog "Соединяемся с " & ip$ & ":" & port$ 'лог
stat = "zdorovo" 'отмечаем, что сейчас будем здороваться
WS.Connect ip$, Val(port$) 'подключаемся
End Sub

Private Sub Form_Terminate() 'выход из программы
WS.Close 'закрываем соединение
End Sub

Private Sub WS_Close() 'закрытие соединения
AddLog "Отключились" 'вывод лога
End Sub

Private Sub WS_Connect() 'соединение установлено
AddLog "Соединились" 'вывод лога
Select Case stat$ 'выбор причины соединения
    Case "zdorovo" 'здороваемся с сервером, а он молчит (
        AddLog "MRIM_CS_HELLO " & Chr$(128) & Chr(0) & Chr(0) & Chr(128) 'вывод лога
        'по протоколу надо отправить 00000001 00000000 00000000 00000001,
        'но если первымидёт старший байт, как я понял
        'отправляем серверу (bin) 10000000 00000000 00000000 10000000
        'явно он ждёт чего-то не то, поэтому в ответ отключается
        WS.SendData Chr$(128) & Chr(0) & Chr(0) & Chr(128) 'шлём
End Select
End Sub

Private Sub WS_DataArrival(ByVal bytesTotal As Long) 'приём пакетов с сервера
WS.GetData xDat$, vbString 'записываем пакет в переменную xDat$
AddLog "Говорит " & xDat$ 'вывод лога
Select Case stat$ 'выбор причины ответа сервера
    Case "recomendacii" 'если ждали рекомендаций
    AddLog "Рекомендуют" & xDat$ 'вывод лога
    IpPort xDat$ 'разделяем ip:port в разные переменные (ip$, port$)
End Select '
End Sub

Private Sub WS_SendComplete() 'пакет ушёл
AddLog "Послали" 'вывод лога
End Sub

'дальше к обмену пакетами код отношения не иеет, он выполняет вспомогательные операции
Sub AddLog(AddText As String) 'запись лога
txtlog.Text = txtlog.Text & vbCrLf & AddText
End Sub

Sub IpPort(TxtIpPort As String) 'разделение на ip и порт
Dim i%, a$, b As Boolean
ip$ = vbNullString
port$ = vbNullString
For i% = 1 To Len(TxtIpPort) - 1
    a$ = Mid(TxtIpPort, i, 1)
    If a$ = ":" Then
        b = True
    ElseIf b Then
        port$ = port$ & a$
    Else
        ip$ = ip$ & a$
    End If
Next i%
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.08.2006 (Ср) 0:17

GorYU, знаешь... судя по представленному коду, писать в раздел "Для профессионалов" - непростительная даже не знаю что...

Для начала, поищи на форуме (поиск вверху, выделен красным), как правильно надо делать обработчик data_arrival (это самые-самые азы).
Потом, как сделаешь правильно, пойми тот факт, что старшие биты и старшие байты - это разные вещи.. А 0x1001 - это два байта, а не 4. И это не весь пакет, а одно поле из него. Весь пакет - структура из 8 полей (см. приведённое тобой же описание). Вот её и шли.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GorYU
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 20.07.2005 (Ср) 17:03

Сообщение GorYU » 21.08.2006 (Пн) 13:41

Народ посмотрел, испугался, и не стал писать.

beat_swamp
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 05.10.2005 (Ср) 16:16

Сообщение beat_swamp » 22.08.2006 (Вт) 10:17

хм1 +) а темка то интересная! может в свободное время посижу поковыряюсь1 если будут результаты, отпишу1

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.08.2006 (Вт) 10:58

Тоже заинтересовало.
Как в переводе на вб будет выглядеть эта декларация?
Код: Выделить всё
#define PROTO_VERSION_MAJOR     1
#define PROTO_VERSION_MINOR     7
#define PROTO_VERSION ((((u_long)(PROTO_VERSION_MAJOR))<<16)|(u_long)(PROTO_VERSION_MINOR))

#define PROTO_MAJOR(p) (((p)&0xFFFF0000)>>16)
#define PROTO_MINOR(p) ((p)&0x0000FFFF)
Остальное вроде понятно.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.08.2006 (Вт) 11:04

Что-то вроде
Const PROTO_VERSION_MAJOR = 1
Const PROTO_VERSION_MINOR = 7
Const PROTO_VERSION = PROTO_VERSION_MAJOR * 65536 Or PROTO_VERSION_MINOR

Только вот беззнаковых целых в VB нет, надо будет с последним разрядом схитрить.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.08.2006 (Вт) 11:05

public const PROTO_VERSION_MAJOR as long =1
public const PROTO_VERSION_MINOR as long =7
public const PROTO_VERSION as long = PROTO_VERSION_MAJOR*2^16 or PROTO_VERSION_MINOR

public function PROTO_MAJOR(byval p as long ) as long
PROTO_MAJOR= (p and &hFFFF0000&) \ 2^16
end function

public function PROTO_MINOR(byval p as long ) as long
PROTO_MINOR= p and &h0000FFFF&
end function
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.08.2006 (Вт) 11:12

Окончательные дефиниции констант и типов протокола.
Вложения
mrim.rar
(2.5 Кб) Скачиваний: 216
Лучший способ понять что-то самому — объяснить это другому.

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re

Сообщение xenomorph » 04.11.2007 (Вс) 21:50

День добрый!

Кто-нить чё нить напрограммировал по теме?
Работающее?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 04.11.2007 (Вс) 22:14

гм, интересная темка. Надо будет попробовать в свободное время накодить. Как недавно встала задача реализовать отправку смс.
Подпись проходит рефакторинг

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 05.11.2007 (Пн) 14:57

2 Lumen:

Как-то странновато - опись протокола без беализации на ВБ :-)
Кто-то что-то не выложил ИМХО :-)
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

    TopList