⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 如何能够判断网络已经断线.txt

📁 VB技巧问答10000例 VB技巧问答10000例
💻 TXT
字号:
我对C++ Builder不太了解,这里给你一个使用VB的解决方案,你可以将它移植到C++中。 
    'API函数定义 
    Dim eR As EIGCInternetConnectionState 
    Dim sMsg As String 
    Dim sName As String 
    Dim bConnected As Boolean 
     
     
    Private Declare Function InternetSetDialState Lib "wininet.dll" _ 
     (ByVal lpszConnectoid As String, ByVal dwState As Long, _ 
     ByVal dwReserved As Long) As Long 
     
     
    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _ 
    (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _ 
    ByVal sProxyBypass As String, ByVal lFlags As Long) As Long 
     
     
    Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" _ 
     Alias "InternetGetConnectedStateExA" _ 
     (ByRef lpdwFlags As Long, _ 
     ByVal lpszConnectionName As String, _ 
     ByVal dwNameLen As Long, _ 
     ByVal dwReserved As Long _ 
     ) As Long 
    Private Enum EIGCInternetConnectionState 
     INTERNET_CONNECTION_MODEM = &H1& 
     INTERNET_CONNECTION_LAN = &H2& 
     INTERNET_CONNECTION_PROXY = &H4& 
     INTERNET_RAS_INSTALLED = &H10& 
     INTERNET_CONNECTION_OFFLINE = &H20& 
     INTERNET_CONNECTION_CONFIGURED = &H40& 
    End Enum 
     
     
    'InternetConnected 函数判断是否连接到Internet的函数 
    '获得是否以及通过何中方式连接到Internet上 
    Private Function InternetConnected(Optional ByRef eConnectionInfo _ 
     As EIGCInternetConnectionState, Optional ByRef _ 
     sConnectionName As String) As Boolean 
     
     Dim dwFlags As Long 
     Dim sNameBuf As String 
     Dim lR As Long 
     Dim iPos As Long 
     
     sNameBuf = String$(513, 0) 
     lR = InternetGetConnectedStateEx(dwFlags, sNameBuf, 512, 0&) 
     eConnectionInfo = dwFlags 
     iPos = InStr(sNameBuf, vbNullChar) 
     If iPos > 0 Then 
     sConnectionName = Left$(sNameBuf, iPos - 1) 
     ElseIf Not sNameBuf = String$(513, 0) Then 
     sConnectionName = sNameBuf 
     End If 
     InternetConnected = (lR = 1) 
    End Function 
     
     
    'InternetConnected 函数的调用 
     
     '检测是否已经以及使用什么方法连接到Internet 
     bConnected = InternetConnected(eR, sName) 
     
     
     '根据获得的结果输出 
     If (eR And INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM Then 
     sMsg = sMsg & "使用modem连接到Internet." & vbCrLf 
     End If 
     If (eR And INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN Then 
     sMsg = sMsg & "使用内部网连接到Internet." & vbCrLf 
     End If 
     If (eR And INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY Then 
     sMsg = sMsg & "通过代理服务器连接到Internet." & vbCrLf 
     End If 
     If (eR And INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE Then 
     sMsg = sMsg & "现在连接处于离线状态." & vbCrLf 
     End If 
     If (eR And INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED Then 
     sMsg = sMsg & "连接已经被设定." & vbCrLf 
     Else 
     sMsg = sMsg & "没有设定好的连接." & vbCrLf 
     End If 
     If (eR And INTERNET_RAS_INSTALLED) = INTERNET_RAS_INSTALLED Then 
     sMsg = sMsg & "本机已经安装了远程访问服务功能." & vbCrLf 
     End If 
     
     '显示连接名称 
     If bConnected Then 
     sMsg = "已连接到Internet,连接名称: " & sName & vbCrLf & vbCrLf & sMsg 
     Else 
     sMsg = "没有连接到Internet,连接名称: " & sName & vbCrLf & vbCrLf & sMsg 
     End If 
<END>
可以向某个节点发ping 命令。如果没有回来的包,则表明网络已经 不通了。 
<END>     
有一个ras的api函数RasEnumConnections可以查出现在系统中所有的连接,返回是0就是没有连接了。 
    下面是一个例子: 
    BOOL WINAPI IsModemOnline() 
    { 
     RASCONN ras[20]; 
     DWORD dSize,dNumber,dCount; 
     
     ras[0].dwSize = sizeof(RASCONN); 
     
     dSize = sizeof( ras ); 
     
     if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 ) 
     if(dNumber>0)return TRUE; 
     return FALSE; 
     
    } 
    如果返回TRUE就表示有连接。该例子在VC 6.0 pack2 + Win2000 pro通过。 
<END>     
用Win32 API 函数: 
    BOOL InternetGetConnectedState() 
    VC/BC/BCB 都可用。 
<END>
    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -