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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 21:25   #1
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию MRIM и Indy

Здравствуйте, уважаемые программисты!
Решил вот попробывать сделать примитивный агент на Indy (пока только авторизацию). Делаю как-то "не по человечески" и не могу понять как отправлять пакет с параметрами.
Первый пакет отправляю так:
Код:
var
b:TBytes;
st:TMemoryStream;
ping:dword;
sendbuf,recbuf:TMRIMPacket;
begin
st:=TMemoryStream.Create;

IdTCPClient1.Host:=edit1.Text;
IdTCPClient1.Port:=StrToInt(Edit2.Text);
IdTCPClient1.Connect;
///Заголовок////
sendbuf.magic:=CS_MAGIC;
sendbuf.proto:=PROTO_VERSION;
sendbuf.seq:=0;
sendbuf.msg:=MRIM_CS_HELLO;
sendbuf.dlen:=0;
sendbuf.from:=0;
sendbuf.fromport:=StrToInt(Edit2.Text);

st.write(sendbuf,sizeof(sendbuf)); //записывю в поток
st.Position:=0;
SetLength(b,st.Size);
st.Read(b[0],st.Size);//переделываю в массив байт
st.Position:=0;
IdTCPClient1.Socket.Write(b,Length(b));//отправляю, получается отправляю 44 байта
st.Clear;


IdTCPClient1.Socket.ReadStream(st,44);//читаю 44 байта - заголовок
st.Position:=0;
st.Read(recbuf,st.Size);//записываю в буфер
st.Clear;

IdTCPClient1.Socket.ReadStream(st,recbuf.dlen);//дочитываю остаток, тут получается 4 байта, интервалы пинга

st.Position:=0;
st.Read(ping,4); //записываю в переменную
ShowMessage(IntToStr(ping));// ping получился 30, вроде правильно
st.free;
Все нормально, получаю положительный ответ и интервал 30 секунд. Далее каждые 30 секунд шлю пакет MRIM_CS_PING, тоже все нормально отправляется. Но не пойму как именно авторизоваться? Вот если делать по тому же методу что делал я, нужно сначала заголовок и все параметры записать в поток и отправить, или писать в поток и отправлять по одному, и каждый раз отправлять новый заголовок? И еще не совсем пойму в каком формате отправлять строки? Перед строкой отправлять ее длину? пробывал различные способы, но так и не получил ответ, либо программа виснет, либо закрывается соединение.
Надеюсь ктонибудь откликнется. Заранее примного благодарен...
Pedro вне форума Ответить с цитированием
Старый 13.02.2011, 12:30   #2
sanek99
 
Регистрация: 09.11.2010
Сообщений: 6
По умолчанию

Никто не подскажет, я точно так же написал код, но вылезает ошибка,

IdTCPClient1.Socket.Write(b,Length( b)) вот в этой строке, дельфи не понимает что такое write, как можно поправить?
sanek99 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как обновить indy 9 на indy 10 Пилигрим Компоненты Delphi 16 30.04.2010 10:11
протокол MMP (он же MRIM он же Agent.Mail.Ru) MainNika Работа с сетью в Delphi 72 02.03.2010 16:47
Indy 9 против Indy 10 OrdJONY Свободное общение 2 08.11.2008 20:28
Indy Killbrum Работа с сетью в Delphi 6 26.09.2008 10:12