【问题标题】:Adobe Air communication with cmdAdobe Air 与 cmd 通信
【发布时间】:2012-06-25 05:49:12
【问题描述】:

有没有办法在 adobe air 中与 cmd(使用本机进程)进行通信。 举个例子; 如何向 cmd 发送“ping www.google.com”并捕获 Air 中的返回值。

编辑

Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Program Files\Adobe\Adobe Flash Builder 4.5>ping www.google.com

Pinging www.l.google.com [209.85.175.103] with 32 bytes of data:
Reply from 209.85.175.103: bytes=32 time=1733ms TTL=50
Reply from 209.85.175.103: bytes=32 time=189ms TTL=50
Reply from 209.85.175.103: bytes=32 time=188ms TTL=50
Reply from 209.85.175.103: bytes=32 time=186ms TTL=50

Ping statistics for 209.85.175.103:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 186ms, Maximum = 1733ms, Average = 574ms

C:\Program Files\Adobe\Adobe Flash Builder 4.5>   

我可以从 Air 应用程序在上面打印。我需要知道是否有一种特定的方法来获取最小值 = ?、最大值 = 的值?和平均值 = ? 计划炸开绳子。有没有别的办法。请帮帮我

提前致谢。

【问题讨论】:

  • 我已经编辑了我的答案,你可以看看

标签: actionscript-3 apache-flex air ping


【解决方案1】:

您应该阅读Interacting with Native Processes in AIR。您在命令提示符(在您的情况下为ping)中写入的是另一个exe 文件,位于Windows 路径中指定的文件夹中。因此,您实际上必须在 AIR 中使用 NativeProcess 类调用 ping.exe。或者,您可以研究 exe 的工作原理,然后在您的 AIR 应用程序中实现该逻辑。

编辑

编辑问题后,这里有更多详细信息:

您使用Regular Expressions(点击该链接并了解正则表达式)

既然你想匹配这个模式

最小值 = (number)ms,最大值 = (number)ms,平均值 = (number)ms

你的正则表达式看起来像

var r:RegExp=/Minimum = ([\d\.]+)ms\, Maximum = ([\d\.]+)ms\, Average = ([\d\.]+)ms/i;

//Then, you execute this on your result string
var arr:Array=r.exec(result);

//Then check if the result matched your regex
if(arr != null) {
    var min:int=arr[1];
    var max:int=arr[2];
    var avg:int=arr[3];
} else {
    trace("invalid result from ping");
}

【讨论】:

    【解决方案2】:

    要执行 shell 命令(例如 ping),您需要从它的位置运行 cmd.exe 或运行 ping.exe。我发现没有直接的方法可以在 AIR 中执行 shell 命令,并且也禁止执行 bat 文件。因此,要调用 cmd.exe,您需要知道它在哪里。它的位置由环境变量 %ComSpec% 给出(我假设我们谈论的是 Windows),但您也无法从 AIR 应用程序中获取此值。
    因此,当我解决了这样的问题时,我只是将 cmd.exe 与我的本机 AIR 应用程序捆绑在一起。不是最好的解决方案,因为 cmd.exe 是在另一个操作系统上使用的。你可以这样解决你的问题:

    • 创建执行“echo %ComSpec%”并退出的本机帮助程序 exe。您可以使用system() 命令来执行此操作,请参阅 WinApi 文档。
    • 在 AIR 应用程序中,运行此帮助程序并读取控制台输出。
    • 使用此路径调用 cmd.exe(您可以为单个命令指定 /C 参数。)

    或者,如果您愿意,可以创建从 AIR 应用程序获取参数并使用 system() 在 shell 上执行它们的本机 exe。然后 AIR 应用程序可以从此 exe 读取控制台输出。 ActionScript 的工作量更少,C++ 的工作量更多(或任何用于本机帮助程序的工作。)
    更新: 如果您已经得到 ping 输出,只需使用 RegExp 解析它,例如
    "Reply from \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}: bytes=32 time=(\d{1,})ms TTL=\d{1,}"。将捕获的时间字符串转换为 int,然后计算 min/max/averages。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多