Текущий архив: 2003.01.23;
Скачать: CL | DM;
Вниз
Ожидание Инета Найти похожие ветки
← →
dkDimon (2002-10-31 13:46) [0]Скажите кто-нито как определить подключен ли комп к Инету (имеется ли доступ в нет в данный момент) и если нет, то как определить время подключения (т.е. программа будет ожидать подключения к нету).
← →
Song (2002-10-31 13:48) [1]В FAQ гляньте.
← →
Opuhshii (2002-10-31 13:48) [2]WinInet
статьи на Delphi.vitpc.com
← →
dkDimon (2002-10-31 17:27) [3]да там чушь какая-то. мне очень нужно отследить момент поключения к Интернету, как это делает ICQ (к примеру 2002a). ООООООЧЧЧЧЧЧЧЧЧЧЧЕЕЕЕЕЕЕННННННННЬЬЬЬЬЬЬ срочно!!! Кто-нито, посдкажите, плиз, умаляю!!!!
← →
Digitman (2002-10-31 17:38) [4]>dkDimon
> да там чушь какая-то
Чушь не там. Чушь ты городишь, утверждая, что ICQ отслеживает "момент подключения к Интернету".
Любая подобная программа (будь то ICQ или не ICQ) отслеживает всего лишь момент установки связи с провайдером, и не более того.
← →
Wonder (2002-10-31 17:48) [5]Digitman © (31.10.02 17:38)
Любая подобная программа (будь то ICQ или не ICQ) отслеживает всего лишь момент установки связи с провайдером, и не более того.
Я бы даже сказал не к провайдеру, а конкретно к своему серверу...
← →
Song (2002-10-31 17:48) [6]Я бы посоветовал TThread+GetConnectedState()
← →
Wonder (2002-10-31 17:56) [7]>Song
А я бы этого не советовал. Категорически...
← →
Digitman (2002-10-31 17:57) [8]>Wonder
.. который, в общем случае, находится у удаленного провайдера..
В частном же на пути между клиентом и удаленным сервером провайдера встает локальный сервер колл.доступа к удал.серверу провайдера
так ?
В результате частного случая имеем еще более "печальную" картину : лок.сервер колл.доступа еще даже с удал.сервером не соединился, а тот же аськин NetDetect уже радостно подпрыгивает, типо - уррааа! интернет есть !!! - и ничтоже сумняшеся грузит десяток экз-ров клиента))))
← →
Wonder (2002-10-31 18:06) [9]>Digitman
Нет погодьте :) NetDetect, скорее всего, подпрыгивает только в том случае, ежели есть связь (не важно какая, буть то хотя бы простейший ping или же еще чего) именно и только с аськиным сервером(ами).
← →
dkDimon (2002-10-31 22:34) [10]Ну я не знаю, как там рабоатет АСЬка и все такое... с чем там устанавливается соединение. мне хотя бы с чем-нибудь, хоть с провом или с серваком, хотя бы попытку установки соединения. КАК? конкретно, а то один рекомендует, второй категорически не рекомендует. соединение проверить я как-нито смогу (есть или нету его), а вот сам момент... м-м-м... попытки подключения
← →
Мазут Береговой (2002-11-01 07:00) [11]Добавь сюда функцию NOW будешь знать есть соединение или нет. Я проверял на DialUp и LAN - все ОК!
{ This component determines online status of the computer }
{ and returns current IP address }
{*************************************************************}
{ PROPERTIES: }
{ IP: String - Current IP address of local machine }
{ Online: Boolean - Online status of local machine }
{ DispatchInterval - Determines in milliseconds the }
{ intervals of time between testing }
{ online of a mode of computer }
{ Enabled: Boolean - As usual... =) }
{ EVENTS: }
{ OnChanged - causes if online status changed. }
{*************************************************************}
unit OnlineIP;
interface
uses
Windows, Messages, Winsock, Classes, Forms;
type
TOnlineIP = class(TComponent)
private
FEnabled: Boolean;
FDispatchInterval: Cardinal;
FWindowHandle: hWnd;
FOnline: Boolean;
FIP: String;
FOnChanged: TNotifyEvent;
procedure UpdateTimer;
procedure SetEnabled(Value: Boolean);
procedure SetDispatchInterval(Value: Cardinal);
procedure SetNoneBool(Value: Boolean);
procedure SetNoneStr(Value: String);
procedure WndProc(var Msg: TMessage);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Enabled: Boolean read FEnabled write SetEnabled;
property DispatchInterval: Cardinal read FDispatchInterval write SetDispatchInterval;
property Online: Boolean read FOnline write SetNoneBool;
property IP: String read FIP write SetNoneStr;
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
end;
procedure Register;
implementation
function LocalIP: String;
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: Array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Result := "";
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^[I] <> nil do
begin
Result := inet_ntoa(pptr^[I]^);
Inc(I);
end;
WSACleanup;
end;
constructor TOnlineIP.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEnabled := True;
FDispatchInterval := 1000;
FWindowHandle := AllocateHWnd(WndProc);
UpdateTimer;
end;
destructor TOnlineIP.Destroy;
begin
FEnabled := False;
UpdateTimer;
DeallocateHWnd(FWindowHandle);
inherited Destroy;
end;
procedure TOnlineIP.WndProc(var Msg: TMessage);
var
OldState: Boolean;
begin
with Msg do
if Msg = wm_Timer then
try
FIP := LocalIP;
OldState := FOnline;
FOnline := (FIP <> "") and (FIP <> "127.0.0.1");
if (not OldState and FOnline) or
(OldState and not FOnline) then
if Assigned(FOnChanged) then FOnChanged(Self);
except
Application.HandleException(Self);
end
else
Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;
procedure TOnlineIP.UpdateTimer;
begin
KillTimer(FWindowHandle, 1);
if (FDispatchInterval <> 0) and FEnabled then
SetTimer(FWindowHandle, 1, FDispatchInterval, nil);
end;
procedure TOnlineIP.SetEnabled(Value: Boolean);
begin
if Value <> FEnabled then
begin
FEnabled := Value;
UpdateTimer;
end;
end;
procedure TOnlineIP.SetDispatchInterval(Value: Cardinal);
begin
if Value <> FDispatchInterval then
begin
FDispatchInterval := Value;
UpdateTimer;
end;
end;
procedure TOnlineIP.SetNoneBool(Value: Boolean); begin {} end;
procedure TOnlineIP.SetNoneStr(Value: String); begin {} end;
procedure Register;
begin
RegisterComponents("UtilMind", [TOnlineIP]);
end;
end.
← →
Digitman (2002-11-01 08:36) [12]>Wonder
Да не подпрыгивает NetDetect до аськиных серверов, Володь)
Он знать не знает ничего и о хостах аськиных ни тем более об их IP ...поверь уж... не веришь - проверь)
Ты вот прикинь - у меня, к примеру, косой десяток экземпляров аськиного клиента висит в Launch, и у каждого экз-ра - свои настройки целевого хоста и порта. А NetDetect"у я этого не сообщал никоим образом, его задача - прощупать интерфейс доступа и "подпрыгнуть" (запустив скопом весь Launch), как только нащупает, а после этого - выгрузиться
← →
dkDimon (2002-11-02 02:09) [13]>Мазут Береговой
Спасибо огромное!
← →
Asteroid (2002-11-02 14:09) [14]> Мазут Береговой (01.11.02 07:00)
Если не ошибаюсь, она не сработает, если два компа дома объединены в сеть, а выход в инет через модем на одном из них. Просто компам присваивается адрес отличный от 127.0.0.1 и 0.0.0.0, а инета нету
← →
Morfein (2002-11-21 23:14) [15]unit NetDetect;
interface
uses
windows, SysUtils;
const
INTERNET_CONNECTION_MODEM = $01;
INTERNET_CONNECTION_LAN = $02;
INTERNET_CONNECTION_PROXY = $04;
INTERNET_RAS_INSTALLED = $10;
INTERNET_CONNECTION_OFFLINE = $20;
INTERNET_CONNECTION_CONFIGURED = $40;
type
TInternetGetConnectedState = function(lpdwFlags, res : dword) : boolean; stdcall;
function NTIsConnected : boolean;
implementation
function NTIsConnected : boolean;
var
dwResult, handle : dword;
addr : pointer;
InternetGetConnectedState : TInternetGetConnectedState;
begin
Result:=false;
handle:=LoadLibrary("wininet.dll");
if not(handle = 0) then
begin
addr:=GetProcAddress(handle, PChar("InternetGetConnectedState"));
if not(addr = nil) then
begin
@InternetGetConnectedState:=addr;
if not InternetGetConnectedState(dword(@dwResult), 0) then
begin
FreeLibrary(handle);
exit;
end;
if (dwResult or INTERNET_CONNECTION_LAN) = dwResult then
begin
{ LAN }
Result:=true;
FreeLibrary(handle);
exit;
end;
if (dwResult or INTERNET_CONNECTION_MODEM) = dwresult then
if (dwresult or INTERNET_RAS_INSTALLED) = dwresult then
if (dwresult or INTERNET_CONNECTION_CONFIGURED) = dwresult then
begin
{ DIALUP }
FreeLibrary(handle);
Result:=true;
exit;
end;
end;
end;
FreeLibrary(handle);
end;
end.
===============================================
Бери функцию из этого модуля, и проверяй, есть ли сеть вообще...
Потом попытайся достучаться до ДНС-сервера с помощью
GetHostByAddr(), и если получиться, то inet с нами, а если
нет, то жди пару секунд и пробуй снова...
Метод провереный на dialup"e и LAN"e
← →
Troll (2002-11-24 13:14) [16]123
← →
mon@rch (2002-11-24 21:04) [17]456
Страницы: 1 вся ветка
Текущий архив: 2003.01.23;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.008 c