Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Вниз

Ожидание Инета   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.007 c
14-72537
Карлсон
2003-01-07 22:46
2003.01.23
заставки для сотового.


14-72540
Poirot
2003-01-03 08:57
2003.01.23
Киньте примеры к книгеDirectX. Графика в проектах Delphi.


6-72451
LEgO-2
2002-11-24 02:57
2003.01.23
Авторизация


6-72428
Mirolex
2002-11-13 04:15
2003.01.23
Как программно отправить email...


6-72446
grvakh
2002-11-26 14:37
2003.01.23
Маленький вопрос по приему в soket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский