Был создан клиент(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