65.9K
CodeProject 正在变化。 阅读更多。
Home

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

2011年9月16日

CPOL

2分钟阅读

viewsIcon

23735

在 Silverlight 中无法直接 ping 网络 IP 或主机名。但是,您可以使用 WCF 服务来实现此功能。 在本文中,我将为您实现相同的功能。

引言

在 Silverlight 中无法直接 ping 网络 IP 或主机名。但是,您可以使用 WCF 服务来实现此功能。 在本文中,我将为您实现相同的功能。 我在这里使用 Silverlight 4。 但这在 Silverlight 3 中也是可行的。

代码使用说明

创建一个使用“ASP.NET Web 站点”作为 Silverlight 托管网站的 Silverlight 应用程序。

image

现在,这将默认为您创建一个 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 来检查它,并根据该结果返回 truefalse

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 日:初始发布
© . All rights reserved.