当前位置:编程学习 > 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<

补充:软件开发 , Delphi ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,