3

WinRT Modern UI アプリケーションで ICMP ping を実行する方法は?

現在、Ping は WinRT に実装されておらず (ここで関連する質問を参照)、Silverlight の以前の戦略は次のとおりです。

  • WCF サービスを使用する
  • 次に ActiveX コンポーネントを呼び出す Javascript を呼び出します。
  • あきらめて(ここで

Vasilyここでは http を使用して、TCP ソケットを使用したネットワーク通信をサポートする StreamSocket を使用して、特定のポートで Web サーバーを「ping」します。

おそらく、 Windows.Networking.Socket s は、WinRT 用の独自の ICMP ライブラリを作成する場合に使用する必要がある最高レベルの API です。

この実装では、System.Net.Sockets を使用して ICMP エコー要求を作成します - 標準の .NET で

このWinRT サンプルでは、​​Windows.Networking.Sockets.DatagramSocket クラスを使用して UDP ソケットを作成します。私が必要としているのは、ICMP を行うための raw ソケットだと思います。

これは 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 に答える