Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

internet connection


Green Templar ©   (2004-10-11 13:50:00) 

Как определить подключён ли ты к интернету?


Rouse_   (2004-10-15 09:27:00) [1]

> [19] Vit@ly ©   (14.10.04 23:43)
Не в курсе, проверить негде...


Vit@ly   (2004-10-14 23:43:00) [2]

2 Rouse_ ©   (14.10.04 22:58) [18]
А все-таки, что покажет компиляция http://sources.ru/delphi/delphi_check_internet_connection.shtmlна компе, который классически соединился с www.microsoft.com, который находится на соседнем компьютере...
ЗЫ. мне очень понравилось такое решение


Rouse_   (2004-10-14 22:58:00) [3]

Теоретически инет - аналог большой локальной сети...
Классически я могу соединиться с www.microsoft.com который будет находиться на соседнем компьютере...
Отсюда следует - интернет является несколько абстрактным понятием, а с абстракцией нельзя установить связь :)
Можно установить связь с компьютером находящимся не в твоей "подсети"...


Sniron   (2004-10-14 22:45:00) [4]

можешь посмотреть здесь, (сам не читал).
http://sources.ru/delphi/delphi_check_internet_connection.shtml


Sniron   (2004-10-14 22:44:00) [5]

можешь посмотреть сдесь, (сам не читал).
http://sources.ru/delphi/delphi_check_internet_connection.shtml


Piter   (2004-10-14 18:10:00) [6]

Vit@ly ©   (13.10.04 20:21) [13]

твое острословие просто восхитительно. Такого тонкого чувства юмора я давно не встречал...

А "определение" - кому оно нужно?

вероятно, тем, кто хочет
"определить подключён ли ты к интернету?"


wal   (2004-10-14 09:51:00) [7]

>А "определение" - кому оно нужно?
Я сижу в локалке, в Инет выхожу через прокси, весьма успешно пишу это сообщение. Внимание вопрос - подключен я к интернету или нет?

С уважением.


Vit@ly   (2004-10-13 20:21:00) [8]

2
> Piter ©   (13.10.04 18:24) [11]
> Как только кто-нибудь из людей даст определение что такое
интернет - я отвечу как определить подключен ли ты к нему > :)

Я, в частности, этого определения не знаю. И до сих пор не пойму с помощью каких средств Piter отправил это сообщение, я его получил. Интернет видимо здесь и рядом не проходил.
А "определение" - кому оно нужно?


S@shka   (2004-10-13 18:50:00) [9]

Риторический вопрос :)


Piter   (2004-10-13 18:24:00) [10]

Как только кто-нибудь из людей даст определение что такое интернет - я отвечу как определить подключен ли ты к нему :)


Vit@ly   (2004-10-13 17:37:00) [11]


> но это еще совсем не значит, что у провайдера канал не "упал".
>

Мне кажется, что если провайдер упал канал, то ты вряд будешь в онлайне.
А в самом вопросе не идет речь о том
> что нужно в данный момент
, а о подключении к инету


wal   (2004-10-13 16:27:00) [12]

> В общем-то верно. Думаю, что нужно проверять по "надежному" IP, а еще "убедительнее" по IP своего провайдера :)
Проверять надо то, что нужно в данный момент, а то проверишь ты, что провайдер доступен, но это еще совсем не значит, что у провайдера канал не "упал". А Интернет это или интранет или еще что-нибудь - это вопрос последний.

С уважением.


Vit@ly   (2004-10-13 16:04:00) [13]

В общем-то верно. Думаю, что нужно проверять по "надежному" IP, а еще "убедительнее" по IP своего провайдера :)


Reindeer Moss Eater   (2004-10-13 15:49:00) [14]

А если 62.118.251.42 в дауне, то значит я "не подключен к инету"?

А если я в офлайне, но мне сменили адрес на 62.118.251.42, то я в сети?


Vit@ly   (2004-10-13 14:50:00) [15]

2 Дмитрий Ботвин   (13.10.04 09:23) [5]
У меня почему-то независимо от подключения, всегда показывает соединение с инетом.
На одном из сайтов нашел другой пример, у меня работает.

uses WinSock;

function BlockingHookProc: Boolean; stdcall;
begin
 { Returns False to end Winsock internal testing loop }
 Result := False;
 if GetTickCount < InitialTick then DifTick := $FFFFFFFF - InitialTick + GetTickCount
 else
   DifTick := GetTickCount - InitialTick;
   { Limit time expired, then cancel Winsock operation }
   if (DifTick > WaitTimeMs) and WSAIsBlocking then WSACancelBlockingCall;
end;

function IsConnectedToNet(HostIP: string; HostPort, CancelTimeMs: Word;
   FirstOctet: Byte; PError: PChar): Boolean;
 var
   GInitData: TWSADATA;
   SockDescript: TSocket;
   SockAddr: TSockAddr;
   NameLen: Integer;

   procedure SaveError(Proc: string; const LastError: Integer);
   begin
     StrLCopy(PError, PChar(Proc + ' - Error no.' + IntToStr(LastError)), 255);
   end;

 begin
   Result := False;
   WaitTimeMs := CancelTimeMs;
   if PError <> nil then PError[0] := #0;
   if WSAStartup($101, GInitData) <> 0 then
   begin
     if PError <> nil then SaveError('WSAStartup', WSAGetLastError);
     Exit;
   end;

   try
     begin
       if PError <> nil then SaveError('WSASetBlockingHook', WSAGetLastError);
       Exit;
     end;

     try
       SockDescript := Socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
       if SockDescript = INVALID_SOCKET then
       begin
         if PError <> nil then SaveError('Socket', WSAGetLastError);
         Exit;
       end;

       try
         SockAddr.sin_family := AF_INET;
         SockAddr.sin_port := 0;    
         SockAddr.sin_addr.S_addr := 0;
         if Bind(SockDescript, SockAddr, SizeOf(SockAddr)) <> 0 then
         begin
           if PError <> nil then SaveError('Bind', WSAGetLastError);
           Exit;
         end;

         if Connect(SockDescript, SockAddr, SizeOf(SockAddr)) <> 0 then
         begin
           Result := (WSAGetLastError = WSAECONNREFUSED) or
             (WSAGetLastError = WSAEINTR) or
             (WSAGetLastError = WSAETIMEDOUT);

           if PError <> nil then SaveError('Connect', WSAGetLastError);
         end
         else
         begin
           NameLen := SizeOf(SockAddr);
           Result := (GetPeerName(SockDescript, SockAddr, NameLen) = 0);
           if not Result and (PError <> nil) then
             SaveError('GetPeerName', WSAGetLastError);
         end;
       finally
         CloseSocket(SockDescript);
       end;
     finally
       WSAUnhookBlockingHook;
     end;
   finally
     WSACleanup;
   end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//  62.118.251.42 ValueHost   2000 2004 ‡ЂЋ  ‚нЎ •®бвЁ­Ј  ђ®ббЁ©бЄЁҐ ‚ҐЎ-‘ҐаўҐа 
KConnected := IsConnectedToNet('62.118.251.42', 80, 1000, 3, PError);

 if StrLen(PError) > 0 then
   ShowMessage('IsConnectedToNet (' + IntToStr(Integer(KConnected)) + ') returned error ' + PError)
                       else
   ShowMessage('IsConnectedToNet');
end;


Дмитрий Ботвин   (2004-10-13 09:23:00) [16]

Я думаю это самый быстрый способ:

uses
  WinInet;

{...}

function IsConnectedToInternet: Boolean;
var
  dwConnectionTypes: DWORD;
begin
  dwConnectionTypes :=
    INTERNET_CONNECTION_MODEM +
    INTERNET_CONNECTION_LAN +
    INTERNET_CONNECTION_PROXY;
  Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsConnectedToInternet then
    ShowMessage('Ты в инете :-)))')
  else
    ShowMessage('Тебя там нет :-(((')
end;


Green Templar   (2004-10-12 16:56:00) [17]

<font color=#00aa00>Спасибо, Guav!</font>


cerber1   (2004-10-12 00:35:00) [18]

Удачно открыть ИЕ.


DVM   (2004-10-11 17:40:00) [19]

Никак. Никто не докажет обратное.


GuAV   (2004-10-11 14:07:00) [20]

статья тут есть
http://www.delphimaster.ru/articles/connect-inet.html


Наверх

Титульная страница Поиск, карта сайта Написать письмо