如何检查我是否有开放的网络连接并且可以联系 c# 中的特定 IP 地址?我在 VB.Net 中看到过示例,但它们都使用“我的”结构。谢谢你。
Brian Clark
问问题
66212 次
7 回答
42
如果您只想检查网络是否已启动,请使用:
bool networkUp
= System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
要检查特定接口的状态(或其他信息),请使用:
NetworkInterface[] networkCards
= System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
要检查远程计算机的状态,您必须连接到该计算机(请参阅其他答案)
于 2008-11-24T14:43:01.473 回答
16
如果要监视状态的变化,请使用System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
事件:
NetworkChange.NetworkAvailabilityChanged
+= new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);
_isNetworkOnline = NetworkInterface.GetIsNetworkAvailable();
// ...
void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
_isNetworkOnline = e.IsAvailable;
}
于 2009-08-04T12:00:08.650 回答
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);
我建议你检查一个“聊天”程序的代码。这些程序会操纵大量 IP 连接,并让您很好地了解如何检查 IP 是否可用。
第二个建议(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 回答