C#检查远程服务器

如果远程服务器可用,任何人都可以建议检查(使用.NET 3.5)的最佳方法是什么?

我正在考虑使用以下代码,但想知道如果社区有另一种选择,是否存在更好的方法。

TcpClient client = new TcpClient("MyServer", 80); if (!client.Connected) { throw new Exception("Unable to connect to MyServer on Port 80"); } client.Close(); 

你可以ping它

您可以从中下载默认页面

你可以做一个HEAD请求

如果它是您网络上的本地IIS6服务器,并且您有一些管理员详细信息,则可以使用某些DirectoryEntry代码连接到IIS

136615上的一些答案也可能有所帮助,特别是关于套接字的公认答案

对于打印服务器(或者,特别是打印机),K Scott的代码可能会有所帮助。 无论如何都要使用这个有趣的代码:-)该代码提到了dns.resolve,它被废弃并被Dns.GetHostEntry取代

我的想法很简单:-)

如果您只想查看给定服务器是否在线,那么在大多数情况下,简单的ping应该可以完成。

 PingReply pingReply; using (var ping = new Ping()) pingReply = ping.Send("http://www.stackoverflow.com/"); var available = pingReply.Status == IPStatus.Success; 

使用此方法,您也不会以任何方式滥用HTTP服务器。

否则(如果你想检查特定端口上是否可以连接),那基本上看起来很好。

只是为了添加丹的答案……我只需要实现这一点,这里有一个很好的小代码片段,可以帮助那些从谷歌到这里的人。

 Imports System.Net Private Function URLExists(pURL As String) As Boolean Try 'Creating the HttpWebRequest Dim request As HttpWebRequest = TryCast(WebRequest.Create(pURL), HttpWebRequest) 'Setting the Request method HEAD, you can also use GET too. request.Method = "HEAD" 'Getting the Web Response. Dim response As HttpWebResponse = TryCast(request.GetResponse(), HttpWebResponse) 'Returns TURE if the Status code == 200 Return (response.StatusCode = HttpStatusCode.OK) Catch 'Any exception will returns false. Return False End Try End Function 

抱歉这是VB,但这就是我面前的情况。 我将把它作为练习让读者根据需要将其转换为C#。

如果您使用的是早期版本的.NET Framework,就像我一样,版本2,您将没有Ping,也没有System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 。 然后,您可以使用HttpWebRequest来检查主机的异议:

  public static bool AccessToWebService() { string host = "http://192.168.99.41"; try { HttpWebRequest request = (HttpWebRequest) WebRequest.Create(host); request.Method = "HEAD"; HttpWebResponse response = (HttpWebResponse) request.GetResponse(); return response.StatusCode == HttpStatusCode.OK; } catch (Exception) { return false; } } 

我猜你想检查一下网站是否可用。 您可以使用System.Net.WebRequest并检查结果。

更新:根据您的评论,如果您有一些服务器(和服务)要监控,那么使用Nagios , HostMonitor或IPSentry等软件包可能更好,而不是自己滚动。