Протокол ICQ (Delphi), Помогите реализовать несколько функций - Сайт про программирование и программирование под linux
Программирование под linux, программирование, языки программирования, книги программирование На сайте представлена информация про программирование в Интернете и работу  

Передача вида рабочего стола через network.
Работа с почтой, Как проверить ящик
ЧАТ для локалки с нуля, создание чата своими руками!!!
Как это делается или с чего начинаются сети, Подскажите с чего начать
RichEdit, Раскрасить текст
Как можно создать простенький http сервер?
Локальный чатс картинкой, как сделать чтобы можно было добавлять к
Asynchronous Socket Error 10049, Ошибка при ClientSocket.active:=true
Проблема с FtpSetCurrentDirectory.
Окраска кнопки, Как сделать?
FtpGetCurrentDirectory
Secure FTP capability, Что это такое
Почему ошибка? и как от неё избавится?, Indy v10.0.52 (TIdUDPServer)
отправить сообщение
Как узнать время на сервере
Передача параметра скрипту на сайте, из приложения, написанного в Delphi 7
Вопросик по компонентам
Дай те пожайлуйста пример работы по FTP
Отпрвка почты idSMTP помогите разобраться, ВЕдь раньше всё работало....
Помощь в разработке
Глючит Data BaseDesctop, Data BaseDesctop
Как Вы относитесь к курящим девушкам?
Обмен файлами по интернет
IdHTTP.Get, Грамотный отлов ошибки №404
Cтандартное окно "Соединение с..."?, Как вызвать стандартное окно "Соединени
Как послать команду и получить ответ?, может это и было, но все таки...
TClientSocket и TServerSocket
Работа с иконками..., ...на рабочем столе
Блок порта, Хочется известный порт закрывать и др.
Ping средствами Дельфей
Обеспечение связи по интернет
Механизм drag&drop файлов, Пример работы
подключение к сокету
TWSocket и Indy 10, Три вопроса на по данным компонентам
Indy.Connect, TimeOut
название активного интернет-соединения, как получить название интернет-соединен
Не могу понять, помогите
Есть исходник письма, как с ним работать?
ClientSocket
ClientSocket1Error
Как проверить наличие компьютера в сети
Proxy. Made in Delphi.
Как перехватывать события,посланные др.приложениям, Пример работы
IdIRC, определение имен на канале
Как организовать докучку по FTP.
Как начать скач. файл а с опред. места
Web-browser, хелп 8)))
API RasDial возвращает Err 668
Проверка прокси сервера на анонимность!
TcpClient1 и ClientSocket1
Realtime sound transfer
Sockets
Назад-вперёд (Web) проблема!!!, как сделать их не активными!!!
как получить информацию с микрофона, Пример
chat IRC, TIdIRCServer и TIdIRC
Интернет, Траффик
Передача данных по Интернет, Программные средства передачи данных
Проблема с методом GET (Indy/ICS), Создание чат-бота
TWebBrawser Help me!, проблема с действием кнопки
Протокол ICQ (Delphi), Помогите реализовать несколько функций
IdHTTP.GEt(), Проблемы с авторизацией
Консольный телнет клиент, очень нужен
Компоненты TTextServer и TTextClient, не могу найти
idFTPserver, исходники
Вопрос о Boot секторах
как качественно увеличить изображение, Пример
Работа с IP-адресом, Как его сделать невидимым?
Как Вы относитесь к курящим девушкам?
Назначение св-ва Port в ClientSocket
Помогите!!!, sockets

Платные хостинги     Раскрутка сайта     Книги по программированию


Протокол ICQ (Delphi), Помогите реализовать несколько функций

Только здесь 1000 посетителей на Ваш сайт всего за 3 у.е.!

- Помогите реализовать следующие функциинужно в цикле подклюцаться к серваку аськии если пароль подошел к уину выдавать сообщениечто все в шоколадеа если произошла ошибка то нужно выдать сообщениечто типа неправильный парольпотом топать дальше по цилуя уже 3 дня бьюсь как это сделать, но нефига неполучается. я использую компонент ICQ Client товарища coban2kвсе это реализуется в отдельном потоке

- Подключение к серваку аськи реализуется примерно так:Код procedure TForm1.icq_Login(Status : longint);begin  // определяем свой IP-адрес  Local_IP := Get_my_IP;  // преобразуем его в DIM_IP  StrToIP(Local_IP,DIM_IP);  // Запоминаем, какой будет наш статус  ICQStatus := Status;  // если ClientSocket открыт, то закроем его  if CLI.Active then    CLI.Close;  // установим флажок isAuth,  // это значит, что сначала мы коннектимся к серверу  // авторизации. UIN и пароль передаются именно ему.  isAuth := true;  // устанавливаем флажок isHDR,  // он говорит нам о том, что, самые первые данные ,  // из ClientSocket следует интерпретировать как  // FLAP-заголовок  isHDR := true;  // заполняем поля Host и Port в ClintSocket,  // адрес сервера авторизации: 'login.icq.com'  // и его порт: 5190  CLI.Address :='';  CLI.Host := 'login.icq.com';  CLI.Port := 5190;  // не забываем и про TMemo  M(Memo,'>>>>>>>>>>  login.icq.com:5190 <<<<<<<<<<<');  // ... и собственно CONNECT  CLI.Open;end;highlightSyntax('delphi1MGQ3Z','delphi'); Добавлено @ 01:41 Авторизация примерно так:Код procedure TForm1.AuthorizePart(p:PPack);var ss : string;    T : integer;    tmp : PPack;begin     // позиционируемся на начало блока данных, пропустив заголовок     PacketGoto(p,sizeof(FLAP_HDR));     // если FLAP-данные содержат лишь 00000001,     // то это самое начало сессии     if (swap(p^.Len)=4)and        (swap(p^.SNAC.FamilyID)=0)and        (swap(p^.SNAC.SubTypeID)=1) then begin       M(Memo,'< Authorize Server CONNECT');              // каждый раз, когда начинается новая TCP-сессия,              // присваиваем SEQ случайное начальное значение       SEQ := random($7FFF);       // в ответ надо передать пакет с UINом и паролем       // создаем объект-пакет типа PPack: в нем формируется       // FLAP-заголовок с Chanel_ID=1       tmp := CreatePacket(1,SEQ);       // сначала надо вставить такой же DWORD=00000001       // (еще надо помнить о порядке следования байтов в DWORD !!!)       PacketAppend32(tmp,DSwap(1));       // далее в поле данных добавляются несколько TLV       // это наш UIN -  TLV(1)       TLVAppendStr(tmp,$1,s(UIN));       // и закодированный пароль - TLV(2)       TLVAppendStr(tmp,$2,Calc_Pass(PASSWORD));       // описывать содержимое других TLV особого смысла нет       TLVAppendStr(tmp,$3,         'ICQ Inc. - Product of ICQ (TM).2000a.4.31.1.3143.85');       TLVAppendWord(tmp,$16,$010A);       TLVAppendWord(tmp,$17,$0004); // 4 - для ICQ2000a       TLVAppendWord(tmp,$18,$001F);       TLVAppendWord(tmp,$19,$0001);       TLVAppendWord(tmp,$1A,$0C47);       TLVAppendDWord(tmp,$14,$00000055);       TLVAppendStr(tmp,$0F,'en');       TLVAppendStr(tmp,$0E,'us');       // посылаем пакет через  ClientSocket       // (здесь tmp-пакет будет также и удален)       PacketSend(tmp);       M(Memo,'> Auth Request (Login)');     end else       // на это сервер ответит так:     // его ответ содержит TLV(1) - т.е. наш UIN     if (TLVReadStr(p,ss)=1)and(ss=s(UIN))then begin        // если это так, то считаем следующий TLV        T := TLVReadStr(p,ss);        case T of          // если это TLV(5) - значит это адрес и порт основного сервера          5: g>begin // BOS-IP:PORT            M(Memo,'< Auth Responce (COOKIE)');            // запоминаем и адрес и порт            WorkAddress := copy(ss,1,pos(':',ss)-1);            WorkPort := strtoint(copy(ss,pos(':',ss)+1,                              length(ss)-pos(':',ss)));            // за ними должен быть и TLV(6) - т.н. COOKIE (256 байт)            // принимаем его прямо в переменную sCOOKIE            // (он пригодится при коннекте к основному серверу)            if (TLVReadStr(p,sCOOKIE)=6) then begin;              // COOKIE получен и значит пора разъединяться              // формируем пустой пакет с Channel_ID=4              tmp:=CreatePacket(4,SEQ); // ChID=4              // который и передаем              PacketSend(tmp);              // закрываем свой ClientSocket              OfflineDiscconnect1Click(self);              // говорим себе, что авторизация пройдена              isAuth := false;              // настраиваем ClientSocket на адрес:порт              // основного (BOS) сервера              CLI.Address := WorkAddress;              CLI.Host := '';              CLI.Port := WorkPort;              M(Memo,'');              M(Memo,'>>> Connecting to BOS: '+ss);              // и коннектимся к нему              CLI.Open;{ ******************************************* }{ в этом месте заканчивается этап авторизации }{ ******************************************* }            end;          end;          // а, например, в случае неверного UINа или пароля          // мы получим TLV(4) и TLV(8)          4,8: begin               M(Memo,'< Auth ERROR');               M(Memo,'TLV($'+inttohex(T,2)+') ERROR');               M(Memo,'STRING: '+ss);               if pos('http://',ss)>0 then begin                 // и даже можем загрузить в браузер присланный нам URL                 // с описанием ошибки                 // Web.Navigate(ss);                 // {это навигатор с панели компонентов Делфи}               end;               TLVReadStr(p,ss); M(Memo,ss);               // конечно же закрываем ClientSocket               OfflineDiscconnect1Click(self);               M(Memo,'');             end;        end;     end;end;highlightSyntax('delphijMxODM','delphi');

- Да этот исходник я уже видел.Может ктонить ище чего подскажет?

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

- Вот тут: Link лежит документация по протоколам Oscar 7/8. Это протоколы ICQ. Думаю ты сможешь найти то, что тебе надо.

- Код break;highlightSyntax('delphiYWE0Mm','delphi'); Это сообщение отредактировал Alex - 11.10.2004, 18:41

- Alex, я не согласен. Break - это выход из цикла, а не "подождать пока что-то выполняется". Человеку просто нужно подождать пока произойдет соединение и авторизация, я так понимаю. Наверное, эти вункции асинхронны.

- ChebaТы прав.Вот еслиб кто помог....код нисать

- Может Sleep();?

- дык, у TICQClient событий дофига разных, вещай обработчик на какое-нить, например первое что я увидел -- OnAuthorizationChangedOkз.ы. а пароли перебирать не хорошо, особенно чужие, только не надо говорить, что свой забыл.

- а может что-то типа suspend

- если всё действительно в потоке, то просто усыплять поток да и всё. другой вариант - как уже было сказано, цепляться на событие об обломе авторизации, в нём задавать новые логин/пароль, и логиниться заново. если функции сами по себе асинхронны, нафига вообще поток?

- Эй! А где взять TICQClient?

- Мне это нужно не для подбора пароля.Ктонить может прислать рабочий код? Пожалуйста

- Простите за Флейм но,Насколько я понял, ты хочешь написать ICQ клиент, а может создашь тему в форуме Поиск патнёров для совместной разработки проектов, и там можно обсудить твою идею! Так будет легче не только для тебя, но и польза другим! Это сообщение отредактировал Мастeр - 12.10.2004, 18:01

Интернет казино     Онлайн игры     Увеличение члена     Купить DVD


Главная страница | программирование модема | api программирование | чпу программирование | программирование шпаргалки | программирование 1232 | программированию ключей | программирование под linux | электронные учебники программирование | builder c программирование | языки программирования basic | метод динамического программирования | задачи нелинейного программирования | 1с программирование скачать | алгоритмические языки программирования | delphi 7 программирование | проект программирование | borland программирование | программирование pocket pc | кнут искусство программирования | программирование памяти | c программирование скачать | Ссылки

Все про проект программирование