如何使用 Silverlight Ping 网络 IP 或主机名?





5.00/5 (2投票s)
在 Silverlight 中无法直接 ping 网络 IP 或主机名。但是,您可以使用 WCF 服务来实现此功能。 在本文中,我将为您实现相同的功能。
引言
在 Silverlight 中无法直接 ping 网络 IP 或主机名。但是,您可以使用 WCF 服务来实现此功能。 在本文中,我将为您实现相同的功能。 我在这里使用 Silverlight 4。 但这在 Silverlight 3 中也是可行的。
代码使用说明
创建一个使用“ASP.NET Web 站点”作为 Silverlight 托管网站的 Silverlight 应用程序。
现在,这将默认为您创建一个 XAML 页面。 在其中添加一个 TextBox
和一个 Button
。 我们将使用 TextBox
输入 IP 地址或主机名,单击按钮后,它将 ping 输入的 IP 地址或主机名。 由于 Silverlight 的限制,您无法直接从客户端应用程序 ping。 您需要创建一个 WCF 服务,并使用它来轻松 ping。 请记住,这里也有一些限制,因为您是从 WCF 托管服务器 ping 的。
让我们实现我们的 WCF 服务。 创建一个名为 PingNetwork
的服务方法,并将 hostNameOrAddress
作为 string
传递。 这将是您的 IP 地址或主机的 DNS 名称。 然后创建 System.Net.NetworkInformation.Ping
的一个实例,并将所需参数传递给它的“Send
”方法。 这将返回“PingReply
”。 现在检查回复的状态。 有几个选项可用。 我只使用了 IPStatus.Success
来检查它,并根据该结果返回 true
或 false
。
public bool PingNetwork(string hostNameOrAddress)
{
bool pingStatus = false;
using (Ping p = new Ping())
{
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 120;
try
{
PingReply reply = p.Send(hostNameOrAddress, timeout, buffer);
pingStatus = (reply.Status == IPStatus.Success);
}
catch (Exception)
{
pingStatus = false;
}
}
return pingStatus;
}
现在来看客户端实现。 将服务引用添加到 Silverlight 应用程序,然后使用您的 IP 地址或主机的 DNS 名称调用服务方法。
client.PingNetworkAsync("google.com");
由于这是一个异步调用,请为该方法实现“Completed
”事件。 在完成的事件中,检查 e.Result
值。 如果服务器能够 ping 通,它将返回 true
,否则将返回 false
。
这是逻辑的一个简单实现。 如前所述,这将从服务器 ping,而不是从客户端 ping。
历史
- 2011 年 9 月 16 日:初始发布