Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Мониторинг подключения с инетом


Автор: Cashey 12.11.2003, 11:35
Решил я написать прожку, что б она постоянно мониторила соединение с интернет. А то, соединяет Админ когда захочет, а я вхожу уже через локалку. Каждый раз браузер запускать для проверки как-то надоело, вот и хочу такую вещь сделать, что б спокойно в трее сидела и мигала когда появляется доступ в инет. Так вот, вопрос, через, что и как проверять соединение с интернетом через локальную сеть?
PS Miranda, например, если напрямую (дома я соединяюсь без локалки) четко отслеживает соединение, а вот через локалку не хочет (всегда онлайн).

Автор: stab 13.11.2003, 19:41
вот пример из MSDN, есесно на C++:

Код

if (InternetGetConnectedState(...) == FALSE)
{
   // Don't attempt connection or it will bring up the dialog
   ...
}
else
{
   //Attempt connection
   if (InternetOpenURL(...) == NULL)
   {
       // Call failed
       err = GetLastError();
       if ((err == ERROR_INTERNET_NAME_NOT_RESOLVED) ||
           (err == ERROR_INTERNET_CANNOT_CONNECT) ||
           (err == ERROR_INTERNET_TIMEOUT))
       {
           // probably not connected...handle appropriately
           ...
       }
   }
   // We're connected!!!
   ....
}


можно просто через сокет пытаться законнектится, скажем, к mail.ru

Автор: Cashey 14.11.2003, 11:16
cully, thinks. Только теперь, может кто укажет мне аналоги приведенных сишных ф-ций на дельфях (ну, или, на худой кОнец, неполенится реализовать в виде ф-ции и скинуть в виде DLL)?

Автор: stab 14.11.2003, 11:30
Код

uses WinInet;

function CheckHTTPConnect(host: String): Boolean;
var
 hinet: Pointer;
 hhost: Pointer;
 hreq: Pointer;
begin
 Result := False;
 hinet := InternetOpen('connection checker', 0, nil, nil, 0);
 if hinet <> nil then begin
   hhost := InternetConnect(hinet, PChar(host), 80, nil, nil, INTERNET_SERVICE_HTTP, 0, 1);
   if hhost <> nil then begin
     hreq := HttpOpenRequest(hhost, 'HEAD', nil, nil, nil, nil, INTERNET_FLAG_RELOAD or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_DONT_CACHE, 1);
     if hreq <> nil then begin
       Result := HttpSendRequest(hreq, nil, 0, nil, 0);
       InternetCloseHandle(hreq);
     end;
     InternetCloseHandle(hhost);
   end;
   InternetCloseHandle(hinet);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if CheckHTTPConnect('mail.ru') then
   ShowMessage('Yeahh!');
end;


это скорее проверка работоспособности HTTP протокола, чем просто наличия интернета

Автор: Cashey 17.11.2003, 13:51
Класс, работает, только тормознуто. Так то же сойдет, но просто хотелось бы узнать, а можно отловить собственно событие коннекта с провайдером на другом компьютере локальной сети (там XP стоит)?

Автор: stab 18.11.2003, 10:11
Для этого, наверно, придется писать небольшую прогу и вешать на каждый комп, что бы за коннектом следила и посылала уведомления.

Автор: Cashey 19.11.2003, 16:58
Хе-хе, щас, даст мне админ на свой компьютер резидента поставить, который будет у него инфу собирать и мне отсылать. В том-то и фишка, что это надо делать тихо и незаметно (а то и по шеям получить можно smile.gif )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)