五种查询Internet连接状态[含IP]的方法 (转)

本文介绍了五种检测计算机是否连接到Internet的方法,包括使用Powersock控件、URL.DLL函数、WinSock编程等技术手段,并提供了详细的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五种查询Internet连接状态[含IP]的方法 (转)[@more@]

 

 五种查询Inte.NET连接状态[含IP]的方法

 四处收集 + 加工整理 = “原创”,呵呵。姑且不理会这些,大家喜欢就好。

 1.Powersock 控件法:
  这种方法最简单,利用FastNet页的 Powersock控件的LocalIP属性即可判断:
  if(Powersock1->LocalIP=="127.0.0.1"):在线
  else:离线
  特点:[1]判断连接状态,[2]获得本地IP。
 2.使用URL.DLL的InetIsOffline(0) 函数
  Win2k:URL.DLL存放在SYSTEM32;
  WIN9X:URL.DLL存放在SYSTEM;
  用GetSystemDirectory(...)得到系统目录。
  .netIsOffline(0)返回值:
  TRUE: 离线;  FALSE:在线。
  特点:判断连接状态。
 3.WinSock编程法:见程序
  特点:[1]判断连接状态;[2]获得本地IP和主机名。
 4.WinInet.DLL的InternetGetConnectedState(&dwFlag,0)函数:
  注意:为使用该函数,须在项目文件中加入:USELIB("WinInet.LIB")
  特点:获得较详的连接描述!
 5.RASapi32.DLL的RasEnumConnections函数:
  要使用该“枚举所有活动连接”函数,必须:
  #include "ras.h"。
  若连接数>0:本机当前已连入Internet;
  否则:  本机当前未连入Internet;

源码如下,在[BCB5 + WIN2K + 拨号上网]下通过(N字头的为菜单项):
-------------Powersock控件法-----------------------------------------
void __fastcall TForm1::N11Click(Tobject *Sender)
{
 if(Powersock1->LocalIP=="127.0.0.1")
  ShowMessage("未连接:"+Powersock1->LocalIP);
 else ShowMessage("已连接:"+Powersock1->LocalIP);
}
-------------URL.DLL的InetIsOffline函数法----------------------------
HINSTANCE hDLL;
typedef bool __stdcall(*FUN)(int); 定义DLL函数指针FUN
FUN isOffLine; 
void __fastcall TForm1::N21Click(TObject *Sender)
{
 char Buffer[MAX_PATH];
 GetSystemDirectory(Buffer,MAX_PATH);
 hDLL=LoadLibrary((AnsiString(Buffer)+"URL.DLL").c_str());
  if(hDLL==NULL){ ShowMessage("Cannot load URL.DLL! Return... "); return; }
 isOffLine=(FUN)GetProcAddress(hDLL,"InetIsOffline");
  if(isOffLine==NULL){ ShowMessage("Cannot load InetIsOffline(int), Return..."); return; }
 if(!isOffLine(0)) ShowMessage("已连接");
 else  ShowMessage("未连接");
 FreeLibrary(hDLL);
}
------------WinSock法------------------------------------------------
void __fastcall TForm1::N31Click(TObject *Sender)
{
 word wVersionRequested;
 WSADATA wsaData;
 wVersionRequested=MAKEWORD(1,1);  Start up WinSock
 WSAStartup(wVersionRequested,&wsaData);
 -----------------------------------------
 hostent *p; char *p2; char s[128];
 gethostname(s,128);  Get the computer name
 p=gethostbyname(s);
 p2=inet_ntoa(*((in_addr *)p->h_addr));  Get the IpAddress
 -----------------------------------------
 AnsiString LocationIP=p2;
 if(LocationIP=="127.0.0.1")
  ShowMessage("未连接:"+LocationIP);
 else ShowMessage("已连接:"+LocationIP);
 WSACleanup();
}
-----------WinInet.DLL的InternetGetConnectedState函数法----------------
void __fastcall TForm1::N41Click(TObject *Sender)
{
 StaticText1->Caption=""; StaticText2->Caption=""; StaticText3->Caption="";
 StaticText4->Caption=""; StaticText5->Caption=""; StaticText6->Caption="";
 StaticText7->Caption="";
 DWORD dwFlag;
 InternetGetConnectedState(&dwFlag,0);
 if(dwFlag & INTERNET_CONNECTION_MODEM) StaticText1->Caption="Yes"; MODEM连接
 else  StaticText1->Caption="No";
 if(dwFlag & INTERNET_CONNECTION_LAN)  StaticText2->Caption="Yes"; LAN连接
 else  StaticText2->Caption="No";
 if(dwFlag & INTERNET_CONNECTION_Proxy) StaticText3->Caption="Yes"; 代理连接
 else  StaticText3->Caption="No";
 ---------检查是否连接-------------------------------------------
 if(InternetGetConnectedState(NULL,0))  StaticText4->Caption="Yes";  在线
 else  StaticText4->Caption="No";
 if(dwFlag & INTERNET_CONNECTION_OFFLINE) StaticText5->Caption="Yes";//离线。注:不好用!
 else  StaticText5->Caption="No";
 ----------------------------------------------------------------
 if(dwFlag & INTERNET_RAS_INSTALLED)  StaticText6->Caption="Yes";
 else  StaticText6->Caption="No";
 if(dwFlag & INTERNET_CONNECTION_CONFIGURED) StaticText7->Caption="Yes";
 else  StaticText7->Caption="No";
}
----------RASAPI32.DLL的RasEnumConnections函数法---------------------------
#include "ras.h"
void __fastcall TForm1::N51Click(TObject *Sender)
{
 RASCONN RASconn[256]; 活动连接数组
 DWORD  BuffSize;  数组所占内存大小;
 DWORD  ConnNum;  活动连接数目
 RASconn[0].dwSize=sizeof(RASCONN); 必须指定一个连接[数组元素]的内存大小;
 BuffSize=sizeof(RASCONN)*256;
 DWORD  dwReturn=RasEnumConnections(RASconn,&BuffSize,&ConnNum);
 if(dwReturn==0)
  {
  if(ConnNum>0) ShowMessage("已连接。当前激活连接数:"+AnsiString(ConnNum));
  else  ShowMessage("未连接。当前激活连接数:"+AnsiString(ConnNum));
  }
 else ShowMessage("RasEnumConnections函数失败!");
}
---------------------------------------------------------------------------


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-990344/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-990344/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值