20

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

4

7 に答える 7

42

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

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

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

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

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

于 2008-11-24T14:43:01.473 に答える
7

第一案(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);

「Chat」プログラムのチェックコードをお勧めします。これらのプログラムは、多くの IP 接続を操作し、IP が使用可能かどうかを確認する方法を教えてくれます。

2 番目の提案 (Ping)

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

Ping netMon = new Ping();
PingResponse response = netMon.PingHost(hostname, 4);
if (response != null)
{
    ProcessResponse(response);
}
于 2008-11-24T14:22:35.773 に答える
4

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);
        }
    }

}
于 2008-11-24T14:34:55.763 に答える
3

を使用してネットワークの状態を確認できます

if(System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
{
  //Do your stuffs when network available

}
else
{
 //Do stuffs when network not available

}
于 2015-12-28T13:22:04.707 に答える
1

特定の IP への接続を試み、拒否とタイムアウトを処理します。

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

于 2008-11-24T14:14:52.793 に答える
-2

私の考えは、別のスレッドで監視を行うための静的クラス/モジュールを用意することでした。簡単な DNS 解決により、ネットワークが稼働しているかどうかを確認できます。ping IMO よりも優れています。

Imports System.Net

Public Module Network_Monitor

Private InsideWorkNet As Boolean = vbFalse
Private Online_Status As Boolean = vbFalse
Private CurrentWorkIPAddress As New IPHostEntry
Private WithEvents Timer_Online_Check As New Timers.Timer With {.Interval = 5000, .Enabled = True, .AutoReset = True}


Public ReadOnly Property GetOnlineStatus() As String

    Get
        Return Online_Status
    End Get

End Property


Public Sub Initialize()

    Set_Online_Status()
    Timer_Online_Check.Start()

End Sub


Public Sub Set_Online_Status()

    If My.Computer.Network.IsAvailable Then
        Try
            Dim DNSTest As IPHostEntry = Dns.GetHostEntry("google.com")
            If DNSTest.AddressList.Length > 0 Then
                Online_Status = True
            Else : Online_Status = False

            End If

        Catch ex As System.Net.Sockets.SocketException

            Online_Status = False

        End Try
    End If

End Sub


Private Sub Timer_Online_Check_Elaspsed(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles Timer_Online_Check.Elapsed
    Set_Online_Status()
End Sub

Public Sub Detect_Work_Network()

    If Online_Status = True Then

        Dim WorkIP As IPHostEntry = New IPHostEntry()

        Try
            WorkIP = Dns.GetHostEntry("serverA.myworkdomain.local")
            If WorkIP.AddressList.Length > 0 Then

                InsideWorkNet = True
                CurrentWorkIPAddress = WorkIP
                'MessageBox.Show(WorkIP.HostName.ToString(), "WorkIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Sockets.SocketException

            Try
                WorkIP = Dns.GetHostEntry("serverA.myworkdomain.com")
                If WorkIP.AddressList.Length > 0 Then

                    InsideWorkNet = False
                    CurrentWorkIPAddress = WorkIP
                    ' MessageBox.Show(WorkIP.HostName.ToString(), "WorkIP", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Catch ey As Sockets.SocketException

            End Try
        End Try
    End If

End Sub

Public Function GetWorkServerName() As String
    If InsideWorkNet = True Then
        Return "serverA.myworkdomain.local"
    Else : Return "serverA.myworkdomain.com"
    End If


End Function



End Module

また、自分が職場のネットワークの内部にいるか外部にいるかを判断する必要もありました。アプリが通信するためのファイアウォールの両側にある異なるサーバー。

于 2014-12-21T15:52:46.630 に答える