程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi判斷網絡鏈接

Delphi判斷網絡鏈接

編輯:Delphi

/*Title:Delphi判斷網絡鏈接

*Author:Insun

*Blog:http://yxmhero1989.blog.163.com

*From:www.4safer.com

/

Delphi判斷網絡鏈接,主要3個方面:判斷是否有網絡連接;判斷網絡連接方式;禁用/啟用 本地網絡連接 。

判斷網絡連接一定要即時的,不要拔了網線還提示有網絡連接。

Delphi判斷網絡鏈接 - InSun - Minghacker is Insun

 

1。URL.DLL中的InetIsOffline函數。

Delphi中沒有對該函數進行聲明,所以我們要自己聲明,寫在implementation下面OK。 函數申明為:
function InetIsOffline(Flag: Integer): Boolean; stdcall; external URL.DLL; 然後就可以調用函數判斷系統是否連接到INTERNET
if InetIsOffline(0) then ShowMessage(沒有連接到網絡)
else ShowMessage(已經連接到網絡);
該函數返回TRUE說明本地系統沒有連接到INTERNET。
附:
大多數裝有IE或OFFICE97的系統都有此DLL可供調用。
InetIsOffline
BOOL InetIsOffline(
DWORD dwFlags,
);

測試這個不即時,老是顯示Connected,已經連接到網絡。

 

Delphi判斷網絡鏈接 - InSun - Minghacker is Insun

 

 2。Delphi裡面的TcpServer。很郁悶的是也不即時。

示例:

procedure TForm1.FormCreate(Sender: TObject);
begin
  try
   TcpServer1.Active :=True ;
   ShowMessage(網絡已連接)

  except
    ShowMessage(網絡沒連接);
  end;
end;

Delphi判斷網絡鏈接 - InSun - Minghacker is Insun

 

3。InternetGetConnectedState

在DELPHI中 引用wininet這個單元就可以直接使用 InternetGetConnectedState函數了,下面給出一個判斷當前網絡連接狀態的函數,在注釋中會一一解釋它的一些相關返回值的含義。 網上都是定義為ConnectionKind這個函數,好默契。   uses wininet; //這個已經說了 必須引用它才可以使用InternetGetConnectedState函數

function ConnectionKind :boolean;
var flags: dword;
begin
Result := InternetGetConnectedState(@flags, 0);
    if Result then
      begin
        if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then showmessage(在線:撥號上網);
        if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then showmessage(在線:通過局域網);
        if (flags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then showmessage(在線:代理);
        if (flags and INTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSY then showmessage(MODEM被其他非INTERNET連接占用);
      end; //if
end; //function

過程結束 下面說下各各返回值的意思:
INTERNET_CONNECTION_MODEM: //現在是通過撥號方式上網的
INTERNET_CONNECTION_LAN:   //現在是通過局域網上網的
INTERNET_CONNECTION_PROXY: //現在是通過代理上網的
INTERNET_CONNECTION_MODEM_BUSY: //現在MODEM被其他非INTERNET連接占用(離線)

經過測試, InternetGetConnectedState函數 不像某些人說的不即時,倒是很即時,一般都對。

 

Delphi判斷網絡鏈接 - InSun - Minghacker is Insun

 

4。IsNetworkAlive

Delphi中沒有對這個函數進行聲明,所以我們要自己聲明,可以在var下,也可在implementation下。

Function IsNetworkAlive(var lpdwFlagsLib:Integer):Integer;stdcall;externalSENSAPI.DLL;

還有要定義三個常量:

Const NETWORK_ALIVE_LAN = 1; //通過局域網上網
Const NETWORK_ALIVE_WAN = 2; //通過廣域網上網
Const NETWORK_ALIVE_AOL = 4; //僅對9895有效判斷是否聯上美國網絡

網絡上歷久彌新的不變給出的還是這個過程。

判斷常常出問題,一般不推薦。

procedure ShowNetWorkState();
var
falg:integer;
Bos:boolean;
begin
Bos:=false;
IsNetworkAlive(falg);
case falg of
    NETWORK_ALIVE_LAN:
      begin
        Showmessage(通過局域網上網。);
        Bos:=true;
      end;
    NETWORK_ALIVE_WAN:
      begin
      Showmessage(通過廣域網上網。);
        Bos:=true;
      end;
    NETWORK_ALIVE_AOL:
      begin
        Showmessage(聯上美國的網絡。); //僅對9895有效所以一般不用判斷NETWORK_ALIVE_AOL
        Bos:=true;
      end;
    else Showmessage(沒有聯網。);
end;   //case
if<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved