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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2009, 21:14   #1
ZeitGeist7
Пользователь
 
Регистрация: 02.02.2009
Сообщений: 54
По умолчанию Проверка соединения с интернетом 2.

в продолжение закрытой темы:
функция
Код:
function CheckUrl(url: string): boolean; 
var 
  hSession, hfile, hRequest: hInternet;
  dwindex, dwcodelen: dword; 
  dwcode: array [1..20] of char; 
  res: pchar; 
begin 
  if pos('http://', lowercase(url)) = 0 then 
    url := 'http://'+url; 
  Result := false;
  hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); 
  if assigned(hsession) then 
  begin 
    hfile := InternetOpenUrl(hsession, pchar(url), nil, 0, INTERNET_FLAG_RELOAD, 0); 
    dwIndex := 0; 
    dwCodeLen := 10; 
    HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex); 
    res := pchar(@dwcode); 
    result := (res = '200') or (res = '302'); 
    if assigned(hfile) then 
      InternetCloseHandle(hfile); 
    InternetCloseHandle(hsession); 
  end; 
end;
имеет противное свойство подвисать если не может достучатся до ссылки. если нет соединения то функция тратит аж 21(!) секунду для того что бы вернуть false
есть какиенить другие способы(более быстрые) проверки??
ZeitGeist7 вне форума Ответить с цитированием
Старый 19.02.2009, 21:44   #2
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

измени таймаут за которой он должен достучаться до сайта...
так же можешь юзать idhttp.head(url); он даст результат быстрей и таймаут там можно менять быстро
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 20.02.2009, 07:48   #3
ZeitGeist7
Пользователь
 
Регистрация: 02.02.2009
Сообщений: 54
По умолчанию

Цитата:
Сообщение от KORN Посмотреть сообщение
измени таймаут за которой он должен достучаться до сайта...
так же можешь юзать idhttp.head(url); он даст результат быстрей и таймаут там можно менять быстро
1)что отвечает за таймаут?
2)idhttp.head(url). как им вобще пользоваться?

спасибо за совет. а можно примером?

Последний раз редактировалось mihali4; 22.02.2009 в 21:28. Причина: Объединение постов
ZeitGeist7 вне форума Ответить с цитированием
Старый 22.02.2009, 17:51   #4
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

1) время ожидания ответа от сервера
2) прмер я уже дал... т.е:
Код:
try
IDHTTP.Head('google.ru');
ShowMessage('инет есть');
except
ShowMessage('инета нет');
end;
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 22.02.2009, 19:15   #5
ZeitGeist7
Пользователь
 
Регистрация: 02.02.2009
Сообщений: 54
По умолчанию

Цитата:
1) время ожидания ответа от сервера
определение я знаю)))
контекст: в function CheckUrl(url: string): boolean; (1 пост этой темы)
что отвечает за таймаут (какая переменная)

Кнопку "Правка" видите?
В следующий раз получите нарушение - нечего плодить посты, когда есть возможность редактировать предыдущий.
Я не для слишком умных сказал?

Последний раз редактировалось mihali4; 22.02.2009 в 21:31.
ZeitGeist7 вне форума Ответить с цитированием
Старый 02.02.2012, 14:59   #6
Orc7
Новичок
Джуниор
 
Регистрация: 02.02.2012
Сообщений: 1
По умолчанию

Цитата:
Сообщение от ZeitGeist7 Посмотреть сообщение
в продолжение закрытой темы:
функция
Код:
function CheckUrl(url: string): boolean; 
var 
  hSession, hfile, hRequest: hInternet;
  dwindex, dwcodelen: dword; 
  dwcode: array [1..20] of char; 
  res: pchar; 
begin 
  if pos('http://', lowercase(url)) = 0 then 
    url := 'http://'+url; 
  Result := false;
  hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); 
  if assigned(hsession) then 
  begin 
    hfile := InternetOpenUrl(hsession, pchar(url), nil, 0, INTERNET_FLAG_RELOAD, 0); 
    dwIndex := 0; 
    dwCodeLen := 10; 
    HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex); 
    res := pchar(@dwcode); 
    result := (res = '200') or (res = '302'); 
    if assigned(hfile) then 
      InternetCloseHandle(hfile); 
    InternetCloseHandle(hsession); 
  end; 
end;
имеет противное свойство подвисать если не может достучатся до ссылки. если нет соединения то функция тратит аж 21(!) секунду для того что бы вернуть false
есть какиенить другие способы(более быстрые) проверки??

Проверка идет 1 секунду, если изменить так:

Код:
function CheckUrl(url: string): boolean; 
var 
  hSession, hfile, hRequest: hInternet;
  dwindex, dwcodelen: dword; 
  dwcode: array [1..20] of char; 
  res: pchar; 
  dwTimeOut: integer;
begin 
  if pos('http://', lowercase(url)) = 0 then 
    url := 'http://'+url; 
  Result := false;
  hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); 
dwTimeOut := 1000;
InternetSetOption(hsession, INTERNET_OPTION_CONNECT_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
  if assigned(hsession) then 
  begin 
    hfile := InternetOpenUrl(hsession, pchar(url), nil, 0, INTERNET_FLAG_RELOAD, 0); 
    dwIndex := 0; 
    dwCodeLen := 10; 
    HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex); 
    InternetSetOption(hfile, INTERNET_OPTION_CONNECT_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
    res := pchar(@dwcode); 
    result := (res = '200') or (res = '302'); 
    if assigned(hfile) then 
      InternetCloseHandle(hfile); 
    InternetCloseHandle(hsession); 
  end; 
end;
Второй раз использовать функцию InternetSetOption конечно необязательно в данном примере. Нужн только, если hfile будет использоваться в следующих функциях.

Спасибо ZeitGeist7 за приведенную функцию. Лучшая функция для проверки интернет соеденения. Лучше чем компоненты Indy и FastNet, нормально не работающие с прокси заданным через IE
Orc7 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с интернетом Макса Свободное общение 10 16.02.2011 15:27
Проверка соединения с интернетом. boostman Работа с сетью в Delphi 4 19.02.2009 12:05
Соединение с интернетом stim-12 Помощь студентам 4 05.01.2009 17:19
проблемы с интернетом Логинова Надежда Компьютерное железо 3 07.05.2008 21:01