Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FTP Поиск и отслеживание состояния, и просто компьютеров при помощи эхо 
:(
    Опции темы
ilya333
Дата 22.1.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.1.2006

Репутация: нет
Всего: нет



Пытаюсь написать программку, которая бы в многопоточном режиме искала и отслеживала состояние FTP-серверов (и просто компьютеров при помощи эхо).
Основываясь на личном опыте, пришёл к выводу, что использовать в своих программах всякие готовые компоненты, - это не для меня. Потому что в них обычно заложено много всего, а того, что нужно мне, как обычно, нет. А задачи то тривиальные. Не нужны мне всякие навороты. Я хочу, чтобы код был компактный, без всяких излишеств, и чтобы мне самому было понятно, что происходит в программе, и что нужно делать в каждом конкретном случае. Давно убедился, что третьей версии Delphi для простых программерских нужд всегда хватает, так сказать, "выше крыши". Ведь в неё заложено всё, что нужно, и нет ничего лишнего.

"Delphi 3 - FOREVER".

Вот и сижу, пытаюсь по MSDN понять, как при помощи стандартных API функций, имеющихся в WinInet, сделать то, что мне нужно. Не получается.
В один поток всё работает замечательно, да вот только на выполнение команды InternetConnect уходит примерно 22 секунды (тайм-аут, который тоже хотелось бы как-то уменьшить) для каждого IP-адреса, который не отвечает. А я хочу, чтобы проверка доступности происходила, скажем для 765 адресов, за минуту-две, а не за 2 часа. Т.е. нужно как-то создать многопоточность (например, от двух до 10 потоков), ведь в асинхронном режиме эти команды, вроде бы как, должны работать. Но как это сделать, я не знаю.
Нашёл готовое решение (реально работающее как надо), но есть два НО:
1) Оно написано на С++, а я этот синтаксис терпеть не могу. Любое чтение программ, написанных на С++, вызывает у меня постепенное отвращение, отупление и озлобление от того, что я ни фига не пониманию, хотя, вроде бы, всё понятно.
2) Там используется решение, основанное не на WinInet, а на создании Socket-ов. А в этом я тоже ничего не понимаю. Delphi я изучаю только по help-ам, которые там есть, а в них про WinInet ничего не написано.

Облазив Инет, я пришёл к выводу, что на функциях WinInet сделать многопоточность не удастся. Отсюда вопрос: я прав, и мне надо забросить идею с WinInet и заняться сокетами, или всё-таки это возможно?
PM MAIL   Вверх
Xonxt
Дата 24.1.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

Репутация: нет
Всего: 1



Дружище! Та же проблема! Я тоже должен проверить около 200 серверов, которые считываются из MySQL базы данных.

Я Написал небольшую функцию. Но на проверку каждого FTP уходит около 2 секунд (если фтп OnLine) и около 10 секунд (если он Offline).

Код

{!-- Эта функция проверяет статус ФТП-сервера, но очень медленно :( --}
Function CheckUrl(Url: String): Boolean;
var
  hSession, MyFtp : hInternet;
begin
  hSession := InternetOpen('MyAgent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  MyFtp := InternetConnect(hSession, PChar(Url), 21, PChar('anonymous'), nil, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
  if MyFtp = nil then Result:=False else Result:=True;
  InternetCloseHandle(hSession);
end;
{!-- конец функции --}


Ждём помощи. smile


PM MAIL ICQ Skype   Вверх
ilya333
Дата 24.1.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.1.2006

Репутация: нет
Всего: нет



То, что мелкософт обещает асинхронную работу нужных мне функций, это и так ясно. Сделал я то, что написано в MSDN. Только, почему-то, асинхронности как не было, так и нет (описанная мной функция InternetSetStatusCallback не срабатывает и процедура InternetStatusCallback остаётся не при делах). А ведь должно работать. Это первый гвоздь. Второй состоит в том, что многопоточность я ни разу не организовывал. По идее, при создании потоков нужно описывать триггеры, для их обработки делать диспетчера и синхронизировать все события с помощью симафоров. А это такой гемор.
Хочется как-то по-простому, по-домашнему, и чтобы работало.
Добавлено @ 20:23
От тормознутости поиска спасение одно: опрашивать адреса в 10 потоков сразу. Можно не делать никаких диспетчеров и не синхронизировать события в потоках, а просто дожидаться завершения всех потоков. Это не так красиво и не спасает от возможных ошибок и проблем в сети, зато тупо и эффективно. Одна проблема: где взять хороший пример, написанный на Delphi и примерно в тему.
PM MAIL   Вверх
ilya333
Дата 24.1.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.1.2006

Репутация: нет
Всего: нет



Как-то лень было лазать по форуму, искать подходящие темы, т.к. форумы я посещаю редко, в-принципе. А тут немного поползал и сразу нашёл то, что интересовало с самого начала:
http://forum.vingrad.ru/index.php?showtopic=60076
В свободное от безделья время поизучаю. Глядишь, что-нибудь и получится.
PM MAIL   Вверх
Xonxt
Дата 24.1.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

Репутация: нет
Всего: 1



Можешь дать мне на мыло xonxt()mail.ru Этот код на С++? Попробую перевести на ДЕЛЬФИ
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.