| Программирование под 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), Помогите реализовать несколько функций
- Помогите реализовать следующие функциинужно в цикле подклюцаться к серваку аськии если пароль подошел к уину выдавать сообщениечто все в шоколадеа если произошла ошибка то нужно выдать сообщениечто типа неправильный парольпотом топать дальше по цилуя уже 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 |