![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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