Как узнать IP-адрес моего сервера по его доменному имени из моего приложения flex air? - PullRequest
1 голос
/ 01 июня 2010

Я работаю над приложением для передачи файлов, где клиент отправляет файлы на сервер cpp. На стороне клиента я могу дать доменное имя сервера, но не IP-адрес, потому что он может отличаться. Так что любой может сказать мне, как я могу получить IP-адрес моего сервера через его доменное имя. Я должен поместить эту логику в эфирное приложение. Спасибо.

1 Ответ

0 голосов
/ 11 декабря 2011

Вы можете рассмотреть NativeProcess API как потенциальное решение вашей проблемы.

Откройте эту страницу и прокрутите вниз; обратите внимание, что они вызывают скрипт Python. Вы можете вызвать любое терминальное / консольное приложение через API-интерфейс NativeProcess и передать процессу любое количество аргументов как Vector.<string>(). По сути, я предлагаю вам попробовать позвонить cmd.exe и передать его ping www.your_unique_server.com. Затем вы можете поймать ответы, возвращаемые через nativeProcess.standardOutput, и у вашего приложения Flex / AIR будет разрешенный IP-адрес для работы. Вот простое приложение AIR, которое я написал для этого:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication 
   xmlns:fx="http://ns.adobe.com/mxml/2009" 
   xmlns:s="library://ns.adobe.com/flex/spark" 
   xmlns:mx="library://ns.adobe.com/flex/mx">

<s:layout>
  <s:VerticalLayout paddingTop="20" paddingLeft="20" 
       paddingRight="20" paddingBottom="20"/>
</s:layout>

<s:Label text="Enter a Domain Name:"/>
<s:TextInput id="domainTI" width="100%" text="www.google.com"/>
<s:Spacer height="20"/>
<s:TextArea id="pingsTA" width="100%" height="100%"
      text="Provide a domain name and click 'Ping!'"/>
<s:Button label="Ping!" click="initializeAndPing();"/>

<fx:Script>
<![CDATA[
private var nativeProcess:NativeProcess;

// called by the button.
private function initializeAndPing():void
{
  if(NativeProcess.isSupported)
  {
    // make NativeProcess ready for use.
    nativeProcess = new NativeProcess();

    nativeProcess.addEventListener(
        ProgressEvent.STANDARD_OUTPUT_DATA, onPingResult);
    nativeProcess.addEventListener(
        ProgressEvent.STANDARD_ERROR_DATA, onStdError);
    nativeProcess.addEventListener(
        IOErrorEvent.STANDARD_INPUT_IO_ERROR, onStdInError);

    pingTheHost();
  }
}

private function pingTheHost():void
{
  pingsTA.text="";

  var cmdFile:File = new File("C:\\Windows\\System32\\cmd.exe");

  var startInfo:NativeProcessStartupInfo;
  startInfo = new NativeProcessStartupInfo();
  startInfo.executable = cmdFile;

  // The \n special chars are necessary
  // for the command to be executed.
  var ping:String = "ping " + domainTI.text + "\n" ;

  nativeProcess.start(startInfo);
  nativeProcess.standardInput.writeUTFBytes(ping);
}

private function onPingResult(e:ProgressEvent):void
{
  // you would need to parse the IP from the text string
  // captured here to make it available as a variable.

  pingsTA.text += 
     nativeProcess.standardOutput.readUTFBytes(
            nativeProcess.standardOutput.bytesAvailable);
}

private function onStdError(e:ProgressEvent):void
{
  trace("StdError: " + 
     nativeProcess.standardError.readUTFBytes(
            nativeProcess.standardError.bytesAvailable));
}

private function onStdInError(e:IOErrorEvent):void
{
  trace("StdInError: " + e.toString());
}

]]>
</fx:Script>

</s:WindowedApplication>

Чтобы использовать NativeProcess, например, в приведенном выше приложении, вам потребуется AIR v2 + SDK (вы можете наложить новый AIR SDK , если у вас <2 SDK), а также вам потребуется чтобы включить профиль <code>extendedDesktop в файле app-descriptor.xml:

<!-- uncomment this node and remove all but "extendedDesktop" -->
<supportedProfiles>extendedDesktop</supportedProfiles>

Еще одна мысль: я полагаю, что NativeProcess API требует, чтобы ваше приложение AIR было установлено как собственное приложение (т. Е. Установлено с помощью файла .exe). Но, как вы видите на скриншоте, это легко сделать с помощью Flash Builder 4+.

enter image description here

Однако, если у вас нет Flash Builder 4, вы всегда можете написать сценарий сборки для ADT , который поставляется с AIR SDK. Этот пост Рича Третолы отлично справляется с инкапсулированием основ.

Наконец, вот как выглядит мое маленькое приложение:

enter image description here

...