2009-07-23 17 views
1

インターネット接続の状態はどういう意味ですか?インターネット接続の状態はどういう意味ですか?

3番のルータを表すステータスがわからないのですか?

4は何を意味しますか?

uses 
    WinInet; 

const 
    MODEM = 1; 
    LAN = 2; 
    PROXY = 4; 
    BUSY = 8; 

function GetConnectionKind(var strKind: string): Boolean; 
var 
    flags: DWORD; 
begin 
    strKind := ''; 
    Result := InternetGetConnectedState(@flags, 0); 
    if Result then 
    begin 
    if (flags and MODEM) = MODEM then strKind := 'Modem'; 
    if (flags and LAN) = LAN then strKind := 'LAN'; 
    if (flags and PROXY) = PROXY then strKind := 'Proxy'; 
    if (flags and BUSY) = BUSY then strKind := 'Modem Busy'; 
    end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    strKind: string; 
begin 
    if GetConnectionKind(strKind) then 
    ShowMessage(strKind); 
end; 
+1

実際にコードを貼り付けるときに、エディタ( 'バイナリ'アイコン)の 'code'オプションを使用します。 :-) –

答えて

6

[InternetGetConnectedState(http://msdn.microsoft.com/en-us/library/aa384702(VS.85%29.aspx)は次のようになり、最初のパラメータにビットマスクを戻します。

<-- bit numbers 
|| |||| 
|| |||+- INTERNET_CONNECTION_MODEM 
|| ||+-- INTERNET_CONNECTION_LAN 
|| |+--- INTERNET_CONNECTION_PROXY 
|| +---- INTERNET_CONNECTION_MODEM_BUSY (No longer used) 
|+------ INTERNET_CONNECTION_OFFLINE 
+------- INTERNET_CONNECTION_CONFIGURED 

所定のビットが設定されている場合、接続がそのタイプであるビットNRあれば。図2に示すように、設定されますが、プロキシを介して接続されている。

また、機能はあなたがインターネットに接続されているかどうかを示す、TRUE/FALSEの値を返します。

コードにある1,2,4,8の値は、右側から数えて10進数の値に相当します。

基本的に、コードは各ビットを順に検査し、strKind変数に接続の性質を示すテキストを設定します。

あなたは「どのルータが3つですか?」と質問していますが、「どうすれば私の接続がルータを経由しているのかわかりますか?私はこれがLAN接続と同じであると仮定します。おそらく、LANにはどこかでインターネットにアクセスするためのブリッジがあります。

0

定数値は、2つのことを意味するフラグです。(1) "3"値を持つことはできません。また、 "フラグ"結果に複数の値を設定できます。たとえば、結果9(バイナリで1001)の場合、最初と最後のチェックは真です。

結果の意味の詳細については、InternetGetConnectedStateのMSDNリファレンスを参照してください。

6

コード1,2,4,8はビットマスクを表します。私は、混乱を避けるために常に16進数のビットマスクを使用することを好みます。パターンはニブル(4バイナリ・ビットのセット)に続いているので、かなり覚えやすいです。

HEX  BINARY  DEC 
$01  00000001  1 
$02  00000010  2 
$04  00000100  4 
$08  00001000  8 
$10  00010000  16 
$20  00100000  32 
$40  01000000  64 
$80  10000000  128 

あなたは今まで一度に2つの値を確認したい場合は、次のことができOR一緒に、例えば、$ 01または$ 02 = $ 03(00000011バイナリ)のために。したがって、モデムとLANの両方が3になります。

何かが設定されているかどうかを確認する一般的な方法は、マスクとANDで行うことです。たとえば、もし私の数が3で、これが$ 02であれば、マスクと値の両方のビットがセットされているので結果は$ 02です。私の数が4で、これが$ 02であれば、マスクと値のビットがセットされていないので結果は$ 00です。

もちろん、これはあなたの本当の疑問が私が思うものには答えません。ルータはこのマスクだけをチェックするだけでは判断できません。このマスクは、モデム(ダイヤルアップ)またはネットワークアダプタ経由で接続しているかどうかを指示します。ルータはネットワークアダプタを超えているため、正確に判断するためにネットワークの詳細な解析が必要になります。

関連する問題