線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2217
推到 Plurk!
推到 Facebook!

如何得知本機是否能連上Internet?

答題得分者是:axsoft
white
一般會員


發表:18
回覆:7
積分:5
註冊:2003-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-21 07:40:50 IP:218.164.xxx.xxx 未訂閱
請問如何得知本機是否能連上Internet? 嘗試過底下這幾種方法都不好. InternetAttemptConnect() 若未上網而有modem時會跳出一個撥號視窗. InternetCheckConnect() 若使用者沒有網路,會造成停滯很久. 不知有什麼方式能快速知道目前能否啟動網路作業(前置判斷),否則一旦啟動若網路有問題會卡半天.直到try{}catch跳出例外才會中斷. 感謝! white
------
white
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-21 09:02:05 IP:61.218.xxx.xxx 未訂閱
引言: 請問如何得知本機是否能連上Internet? 嘗試過底下這幾種方法都不好. InternetAttemptConnect() 若未上網而有modem時會跳出一個撥號視窗. InternetCheckConnect() 若使用者沒有網路,會造成停滯很久. 不知有什麼方式能快速知道目前能否啟動網路作業(前置判斷),否則一旦啟動若網路有問題會卡半天.直到try{}catch跳出例外才會中斷. 感謝! white
white您好: 請試試下面的方法看看是否是您要的!

五種查詢Internet連接狀態[含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(...)得到系統目錄。
   InetIsOffline(0)返回值:
   TRUE: 離線;   FALSE:在線。
   特點:判斷連接狀態。    
 3.WinSock:
   特點:[1]判斷連線狀態;[2]取得本地端IP和主機名稱。    
 4.WinInet.DLL的InternetGetConnectedState(&dwFlag,0)函數:
   注意:為使用該函數,須在項目文件中加入:USELIB("WinInet.LIB")
   特點:取得較詳細的連線資訊!
 5.RASAPI32.DLL的RasEnumConnections函數:
   要使用該「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;     //連線數目的Buffer大小;
 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函數失敗!");
}
---------------------------------------------------------------------------
聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/03/21 09:06:12
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-17 11:06:24 IP:220.138.xxx.xxx 未訂閱
我是用第五種方法...ras的...可是為什麼不成功阿..我的電腦網路是好的,都可以上kimo了..為什麼程式說沒有連線呢..
系統時間:2024-04-29 3:17:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!