zoukankan      html  css  js  c++  java
  • 判断网络是否连接

    判断网络的是否连接或者连接方式,比较重要的一点就是是不是即时判断,如果你明明无连接,判断出来却说你有,连接上了,却说你还未连接,下面要介绍的两个方法中InternetGetConnectedState就是不怎么够即时的API函数,而第二个使用的是IsNetworkAlive这个API函数,这个没有InternetGetConnectedState的那种问题,但是可能需要安装SDK,也就是.Net框架。

    一、InternetGetConnectedState

    在DELPHI中引用wininet这个单元就可以直接使用 InternetGetConnectedState函数了,下面给出一个判断当前网络连接状态的函数,在注释中会一一解释它的一些相关返回值的含义。

    uses wininet;//这个已经说了必须引用它才可以使用InternetGetConnectedState函数

    functionConnectionKind :boolean;
    var flags: dword;
    begin
      Result :=InternetGetConnectedState(@flags, 0);
        if Result then
         begin

           if (flags andINTERNET_CONNECTION_MODEM) =INTERNET_CONNECTION_MODEM then showmessage('在线:拨号上网');
           if (flags and INTERNET_CONNECTION_LAN)= INTERNET_CONNECTION_LAN then showmessage('在线:通过局域网');
           if (flags andINTERNET_CONNECTION_PROXY) =INTERNET_CONNECTION_PROXY then showmessage('在线:代理');
           if (flags andINTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSYthen showmessage('MODEM被其他非INTERNET连接占用');
         end; //if
    end;//function

    过程结束 下面说下各各返回值的意思:
    INTERNET_CONNECTION_MODEM: //现在是通过拨号方式上网的
    INTERNET_CONNECTION_LAN:  //现在是通过局域网上网的
    INTERNET_CONNECTION_PROXY: //现在是通过代理上网的
    INTERNET_CONNECTION_MODEM_BUSY: //现在MODEM被其他非INTERNET连接占用(离线)

    以上就是通过使用InternetGetConnectedState函数实现的判断网络状态的方法

     

    [hr]

     

    二、IsNetworkAlive

    Delphi中没有对这个函数进行声明,所以我们要自己声明,请把下面的代码加入到当前窗体或者单元的 声明全局变量的地方也就是第一个var下面。

    Function IsNetworkAlive(varlpdwFlagsLib:Integer):Integer;stdcall;external'SENSAPI.DLL';

    还有要定义三个常量:

    Const NETWORK_ALIVE_LAN =1;  //通过局域网上网
    ConstNETWORK_ALIVE_WAN = 2;  //通过广域网上网
    ConstNETWORK_ALIVE_AOL = 4;  //仅对98/95有效判断是否联上美国网络

    下面还是给出一个过程来判断当前网络的状态,这次是一个过程

    procedure ShowNetWorkState();
    var
    falg:integer;
    Bos:boolean;
    begin
      Bos:=false;
      IsNetworkAlive(falg);
      case falgof
       NETWORK_ALIVE_LAN:
         begin
           Showmessage('通过局域网上网。');
           Bos:=true;
         end;
       NETWORK_ALIVE_WAN:
         begin
         Showmessage('通过广域网上网。');
           Bos:=true;
         end;
       NETWORK_ALIVE_AOL:
         begin
           Showmessage('联上美国的网络。');  //仅对98/95有效所以一般不用判断NETWORK_ALIVE_AOL
           Bos:=true;
         end;
        else Showmessage('没有联网。');
      end;  //case
    if Bos then Showmessage('你现在是联网状态!')
      elseShowmessage('你现在是离线状态!');
    end;

    下面再介绍一个方法可以判断网络是否连通的。

    三、URL.DLL中的InetIsOffline函数。

    Delphi中没有对该函数进行声明,所以我们要自己声明,这跟上面的第二种方法的声明是同个道理
    函数申明为:
    functionInetIsOffline(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,
    );

  • 相关阅读:
    libcurl的内存泄露的坑
    Linux 经典面试题(转)
    全栈项目|小书架|服务器开发-Koa2 全局异常处理
    强大的CompletableFuture
    如何进行kubernetes问题的排障
    Golang的json包
    JAVA面试题:Spring中bean的生命周期(转)
    建造者模式
    Netty学习篇④-心跳机制及断线重连
    Fabric1.4:手动启动 first-network 网络(三)
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940667.html
Copyright © 2011-2022 走看看