Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.013 c
1-72278
Allex
2003-01-15 11:26
2003.01.23
Работа с файлами


3-72088
Назаров Евгений
2002-12-28 23:21
2003.01.23
Удалённый доступ к БД


1-72210
ArhangeJI
2003-01-14 12:42
2003.01.23
ComboBox как избавиться от двух символов в конце текста...


3-72121
BlackTiger
2002-12-30 13:55
2003.01.23
А бывают гриды с КАЛЬКУЛИРУЕМЫМИ КОЛОНКАМИ?


3-72037
Rule
2003-01-05 01:07
2003.01.23
Помогите с синхронизацией данных