web-dev-qa-db-ja.com

C#でネットワークステータスを確認する

ネットワーク接続が開いていて、C#の特定のIPアドレスに接続できることを確認するにはどうすればよいですか? VB.Netで例を見てきましたが、すべて 'My'構造を使用しています。ありがとうございました。

17
Brian Clark

ネットワークが稼働しているかどうかを確認したいだけの場合は、次を使用します。

bool networkUp
    = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();

特定のインターフェイスのステータス(またはその他の情報)を確認するには、次を使用します。

NetworkInterface[] networkCards
    = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();

リモートコンピューターのステータスを確認するには、そのコンピューターに接続する必要があります(他の回答を参照)

38
Yona

ステータスの変化を監視する場合は、 System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged イベント:

NetworkChange.NetworkAvailabilityChanged 
    += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);
_isNetworkOnline = NetworkInterface.GetIsNetworkAvailable();


// ...
void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
    _isNetworkOnline  = e.IsAvailable;
}
13
CCrawford

最初の提案(IP接続)

次のような方法でIPアドレスへの接続を試みることができます。

IPEndPoint ipep = new IPEndPoint(Ipaddress.Parse("IP TO CHECK"), YOUR_PORT_INTEGER);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Connect(ipep);

「チャット」プログラムのチェックコードをお勧めします。これらのプログラムは多くのIP接続を操作し、IPが使用可能かどうかを確認する方法についての良いアイデアを提供します。

2番目の提案(Ping)

Pingを試すことができます。ここに良い チュートリアル があります。あなただけを行う必要があります:

Ping netMon = new Ping();
PingResponse response = netMon.PingHost(hostname, 4);
if (response != null)
{
    ProcessResponse(response);
}
5

HTTPステータスコードに関心がある場合は、次のように問題なく機能します。

using System;
using System.Net;

class Program {

    static void Main () {
        HttpWebRequest req = WebRequest.Create(
            "http://www.oberon.ch/") as HttpWebRequest;
        HttpWebResponse rsp;
        try {
            rsp = req.GetResponse() as HttpWebResponse;
        } catch (WebException e) {
            if (e.Response is HttpWebResponse) {
                rsp = e.Response as HttpWebResponse;
            } else {
                rsp = null;
            }
        }
        if (rsp != null) {
            Console.WriteLine(rsp.StatusCode);
        }
    }

}

よろしく、タンバーグ

3
tamberg

さて、あなたは特定のIPに接続して、拒否とタイムアウトを処理しようとします。

System.Net.Sockets名前空間のTcpClientクラスを見てください。