檢測計算機是否聯網比較簡單的做法可以通過乙個 win32 internet(wininet) 函式 internetcheckconnection來實現;
這個函式的功能是檢查是否能夠建立 internet 連線。
它的實現是在 %systemroot%\system32\wininet.dll 中,delphi 呼叫宣告在 wininet.pas 中,
其 api 宣告如下:
bool internetcheckconnection(
in lpcstr lpszurl,
in dword dwflags,
in dword dwreserved
);引數的意義是:
lpszurl: 需要測試能否建立連線的 url 位址,可以為空;
dwflags: 目前只能是 flag_icc_force_connection(這個常量 delphi 中沒有宣告,其值為 $00000001);
dwreserved: 目前只能為 0。
呼叫的說明:
如果 lpszurl 是非空的,windows 從中解析出 host 名然後 ping 這個指定的 host。
如果 lpszurl 是空的,並且 wininet 內部伺服器的 database 中有乙個關於最近的 server 的紀錄,windows 就從這條紀錄中解析出 host 名然後 ping 它。
如果能夠成功的連線返回 true,否則返回 false;
以下是乙個判斷當前計算機是否聯網的例子:
procedure tform1.button1click(sender: tobject);
begin
if internetcheckconnection('', 1, 0) then
edit1.text:= 'connected'
else
edit1.text:= 'disconnected';
end;
通過上述的方法只能檢測出當前計算機是否物理聯網,即網線是否接好,網絡卡是否能順利工作,不能確定是否能夠實現獲得 internet 服務,即是否能和 isp 進行 internet 連線。
這時可以通過另乙個 win32 internet(wininet) 函式 internetqueryoption 來檢測;
這個函式的功能是查詢指定 internet 控制代碼的狀態、選項。
其 api 宣告如下:
bool internetqueryoption(
in hinternet hinternet,
in dword dwoption,
out lpvoid lpbuffer,
in out lpdword lpdwbufferlength
);引數的意義是:
hinternet:查詢物件的 internet 控制代碼(全域性查詢時為 nil),
dwoption:查詢的專案;
lpbuffer:返回的查詢結果;
lpdwbufferlength:查詢結果的位元組長度(包括 in 和 out);
查詢成功返回 true,否則返回 false;
我們要查詢當前計算機的 internet 連線狀態時可以使用查詢專案 internet_option_connected_state,
得到的 connectstate 返回值可能是以下值的乙個或幾個值之和:
internet_state_connected :$00000001 連線狀態;
internet_state_disconnected :$00000002 非連線狀態(和 internet_state_connected 對應);
internet_state_disconnected_by_user :$00000010 使用者請求的非連線狀態
internet_state_idle :$00000100 連線狀態,並且空閒
internet_state_busy :$00000200 連
接狀態,正在響應連線請求
以下是乙個判斷當前計算機是否可以獲得 internet 服務的例子:
function tform1.checkoffline: boolean;
varconnectstate: dword;
statesize: dword;
begin
connectstate:= 0;
statesize:= sizeof(connectstate);
result:= false;
if internetqueryoption(nil, internet_option_connected_state, @connectstate, statesize) then
if (connectstate and internet_state_disconnected) <> 2 then result:= true;
end;
procedure tform1.button1click(sender: tobject);
begin
if checkoffline then
edit1.text:= 'connect to isp'
else
edit1.text:= 'disconnect to isp';
end;
需要說明的是 internetqueryoption 函式的檢測結果只能表明當前的 internet 設定是可用的,
並不能表示計算機一定能訪問 internet,例如網線掉了,網絡卡突然壞了之類的錯誤就沒法檢測出來,
要想檢測當前計算機是否能夠獲得 internet 服務了必須兩個函式結合起來使用。
以上程式在 win2000, delphi5.0 下除錯通過。
最後要提醒大家注意的是在 uses 中要加上 wininet。
c 判斷網路是否連線
win32 api函式的做法 要用的函式 internetgetconnectedstate 函式原形 bool internetgetconnectedstate lpdword lpdwflags,dword dwreserved 引數lpdwflags返回當前網路狀態,引數dwreserved...
C 判斷檢測網路是否連線
完整的 using system.runtime.interopservices namespace internet public class class1 dllimport wininet.dll private extern static bool internetgetconnecteds...
linux下判斷網路是否連線
本文改寫自網上的乙個程式,原始程式中為阻塞式呼叫,而且有現成建立的過程,非常不利於整合到自己程式中,因此對原始程式進行改造,使其可以完成傳送乙個imcp包的方式來判斷網路連通,只需要呼叫改進後的 bool netisok 函式即可,該函式返回true即表示網路狀態良好,否則表示網路狀態不連同,本程式...