2


1

私はそれがファイアウォールなしで完全に動作するインターネット接続をチェックするために次のコードを使用しました ファイアウォールでネット接続を確認する方法 私を助けてください

プライベートstatic ManualResetEvent connectDone = new ManualResetEvent(false); public static bool IsInternetConnected(){int Desc; string [] sitesList = {"www.google.co.in"、 "www.microsoft.com"、 "www.sun.com"};ブールステータス。 status = InternetGetConnectedState(out Desc、0); if(status){try {connectDone.Reset();} TcpClientクライアント= new TcpClient();

client.BeginConnect(sitesList [0]、80、新しいAsyncCallback(ConnectCallback)、クライアント); connectDone.WaitOne(1000、false); if(client.Connected)status = true;そうでなければstatus = false。 client.Close(); } catch(System.Exception ex){BringDebug.WriteToLog( "BringNet"、 "IsInternetConnected"、ex.Message); falseを返します。 else {falseを返します。 }

ステータスを返します。 }

ConnectCallback(IAsyncResult ar){try {TcpClient client1 =(TcpClient)ar.AsyncState; client1.EndConnect(ar); //接続を完了します。 connectDone.Set(); (例外e){Console.WriteLine(e.ToString()); // connectDoneイベントをトリガします。 }}

1 Answer


5


TcpClient`の代わりに WebRequest`を使う場合は、システムのデフォルトのプロキシなどを使うべきです。 それはまた少ないコードになるでしょう:)

例えば:

システムを使用する。 System.Netを使用する。

クラステスト{静的無効Main(){var request =(HttpWebRequest)WebRequest.Create( "http://www.google.com"); request.Timeout = 1000;

試してください{using(var response = request.GetResponse()){} Console.WriteLine( "Success"); } catch(WebException){Console.WriteLine( "接続なし"); }}}