3

如何在 WinRT Modern UI 应用程序中执行 ICMP ping?

Ping 目前没有在 WinRT 中实现(请参阅此处的相关问题),Silverlight 中以前的策略是:

  • 使用 WCF 服务
  • 调用 Javascript,然后调用 ActiveX 组件
  • 放弃(这里

Vasily在这里使用 http 在特定端口上使用 StreamSocket 来“ping”网络服务器,StreamSocket 支持使用 TCP 套接字的网络通信。

如果我想为 WinRT 编写自己的 ICMP 库,也许Windows.Networking.Socket是我必须使用的最高级别的 API。

实现使用 System.Net.Sockets 发出 ICMP 回显请求 - 在标准 .NET 中

WinRT 示例使用 Windows.Networking.Sockets.DatagramSocket 类创建 UDP 套接字。我认为我需要的是原始套接字来执行 ICMP。

这甚至可以在 WinRT 沙盒中进行 ICMP ping 吗?

4

1 回答 1

1

就像是:

try
            {
                using (var tcpClient = new StreamSocket())
                {
                    await tcpClient.ConnectAsync(
                        new Windows.Networking.HostName(HostName),
                        PortNumber,
                        SocketProtectionLevel.PlainSocket);

                    var localIp = tcpClient.Information.LocalAddress.DisplayName;
                    var remoteIp = tcpClient.Information.RemoteAddress.DisplayName;

                    ConnectionAttemptInformation = String.Format("Success, remote server contacted at IP address {0}",
                                                                 remoteIp);
                    tcpClient.Dispose();
                }
            }
            catch (Exception ex)
            {
                if (ex.HResult == -2147013895)
                {
                    ConnectionAttemptInformation = "Error: No such host is known";
                }
                else if (ex.HResult == -2147014836)
                {
                    ConnectionAttemptInformation = "Error: Timeout when connecting (check hostname and port)";
                }
                else
                {
                    ConnectionAttemptInformation = "Error: Exception returned from network stack: " + ex.Message;
                }
            }
            finally
            {
                ConnectionInProgress = false;
            }

完整来源: github

于 2012-10-16T10:16:46.427 回答