C#2008 SP1インターネット接続をテストする最速の方法
私はこのコードを使用してクライアントWebサイトに接続しています。これは、ソフトフォンアプリケーション用です。ユーザが電話をかける前に、ソフトフォンはアクティブなインターネット接続があるかどうかをテストする必要があります。
私は、httpWebRequestクラスを使用してクライアントWebサイトに接続したかったとします。応答がOKの場合は、インターネット接続を続行できます。
しかし、私は応答が時間がかかり過ぎて応答していることに気付きました。これが非常に効率的なテスト方法ではないかどうかはわかりません。
しかし、自分のウェブサイトを閲覧すると、ページの読み込みに1秒もかかりません。しかし、私は、HttpWebRequestクラスを使用するときに時間がかかりすぎる
だから、このための要件は次のとおりです。
はいつかプロキシは、クライアントのオフィスで使用されます。 TCPClientクラスは使用できません(プロキシプロパティはありません)。プロキシはSOCKSをサポートしていないため、Socketsクラスは使用できません。
タイムアウトプロパティを使用する必要があります。したがって、WebClientクラスは使用できません。これは、応答が返されるまでソフトフォンがフリーズするためです。数秒後にタイムアウトします。
私が考えることができる唯一のものは、HttpWebRequestクラスです。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxxxxxxxx.com");
request.Timeout = 5000;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine("IsSIPServerAvailable: " + response.StatusCode);
isAvailable = true;
}
========のp \の呼び出しを使用して編集====
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);
[Flags]
enum InternetConnectionState_e : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
// In function for checking internet
InternetConnectionState_e flags = 0;
bool isConnected = InternetGetConnectedState(ref flags, 0);
その欠点(IMO)は、コンピュータが「一般的なインターネット」に接続されているかどうかだけを伝えることです。それはあなたが後になっている特定のサービスを受けることができるかどうかをいくらか示しているだけです。それを行う最善の方法は、その非常にサービスに接続することです。もちろん、それがまだ2番目の後に有効であることを保証するものではありませんが、可能であれば、より良い指標になると思います。 (場合によっては、接続するだけで何らかの料金が発生するなど) –
p/Invokeのコードを編集しました。しかし、それはLANが私のコンピュータに接続されているか(接続されているかどうか)教えてくれます。ただし、インターネットに接続しているかどうかはわかりません(インターネットを参照)。 – ant2009
@robUK:InternetCheckConnectionの呼び出しを含めるために私の答えを編集しました。これは別のP/Invokeです。試してみることができます。具体的なURLが利用可能かどうかを教えてください。しかし、自分で接続するよりもやや速いと思います。 –