Adobe Air与cmd的通信

时间:2012-06-25 05:49:13

标签: actionscript-3 flex air ping

有没有办法在adobe air中与cmd(使用本机进程)进行通信。 举个例子; 如何将“ping www.google.com”发送到cmd并在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应用程序上面打印。我需要知道是否有一种特定的方法来获取最小值=?,最大值=?和平均=? 计划爆炸字符串。还有另一种方式吗?请帮帮我

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

修改

编辑完问题后,有以下详细信息:

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

因为你想匹配这种模式

  

最小=(数字)ms,最大=(数字)ms,平均=(数字)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");
}

答案 1 :(得分:1)

要执行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参数。)

或者,如果您愿意,可以创建本机exe,它从AIR应用程序获取参数并使用system()在shell上执行它们。然后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,然后计算最小值/最大值/平均值。