ActionScript2011/05/11 10:23
웹서버 예제

<?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"
                       title="Test AIR Web Server"
                       applicationComplete="init()" viewSourceURL="srcview/index.html">
    <s:layout>
        <s:VerticalLayout paddingTop="8" paddingLeft="8" paddingRight="8" paddingBottom="8" />
    </s:layout>
    
    <fx:Script>
        <![CDATA[
            import flash.events.Event;
            import flash.events.ProgressEvent;
            import flash.events.ServerSocketConnectEvent;
            import flash.net.ServerSocket;
            import flash.net.Socket;
            import flash.utils.ByteArray;
            
            import mx.controls.Alert;
            
            private var serverSocket:ServerSocket;
            private var mimeTypes:Object = new Object();
            
            private function init():void {
                mimeTypes[".css"] = "text/css";
                mimeTypes[".gif"] = "image/gif";
                mimeTypes[".htm"] = "text/html";
                mimeTypes[".html"] = "text/html";
                mimeTypes[".ico"] = "image/x-icon";
                mimeTypes[".jpg"] = "image/jpeg";
                mimeTypes[".js"] = "application/x-javascript";
                mimeTypes[".png"] = "image/png";
                
                var webroot:File = File.applicationStorageDirectory.resolvePath("webroot");
                if (!webroot.exists) {
                    File.applicationDirectory.resolvePath("webroot").copyTo(webroot);
                }
            }
            
            private function listen():void {
                try {
                    serverSocket = new ServerSocket();
                    serverSocket.addEventListener(Event.CONNECT, socketConnectHandler);
                    serverSocket.bind(Number(port.text));
                    serverSocket.listen();
                    log.text += "Listening on port " + port.text + "...\n";
                }
                catch (error:Error) {
                    Alert.show("Port " + port.text +
                        " may be in use. Enter another port number and try again.\n(" +
                        error.message +")", "Error");
                }
            }
            
            private function socketConnectHandler(event:ServerSocketConnectEvent):void {
                var socket:Socket = event.socket;
                socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
            }
            
            private function socketDataHandler(event:ProgressEvent):void {
                try {
                    var socket:Socket = event.target as Socket;
                    var bytes:ByteArray = new ByteArray();
                    socket.readBytes(bytes);
                    var request:String = "" + bytes;
                    log.text += request;
                    var filePath:String = request.substring(4, request.indexOf("HTTP/") - 1);
                    var file:File = File.applicationStorageDirectory.resolvePath("webroot" + filePath);
                    if (file.exists && !file.isDirectory) {
                        var stream:FileStream = new FileStream();
                        stream.open(file, FileMode.READ);
                        var content:ByteArray = new ByteArray();
                        stream.readBytes(content);
                        socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                        socket.writeUTFBytes("Content-Type: " + getMimeType(filePath) + "\n\n");
                        socket.writeBytes(content);
                    }
                    else {
                        socket.writeUTFBytes("HTTP/1.1 404 Not Found\n");
                        socket.writeUTFBytes("Content-Type: text/html\n\n");
                        socket.writeUTFBytes("<html><body><h2>Page Not Found</h2></body></html>");
                    }
                    socket.flush();
                    socket.close();
                }
                catch (error:Error) {
                    Alert.show(error.message, "Error");
                }
            }
            
            private function getMimeType(path:String):String {
                var mimeType:String;
                var index:int = path.lastIndexOf(".");
                if (index > -1) {
                    mimeType = mimeTypes[path.substring(index)];
                }
                return mimeType == null ? "text/html" : mimeType;
            }
        ]]>
    </fx:Script>
    
    <s:HGroup verticalAlign="middle">
        <s:Label text="Port:"/>
        <s:TextInput id="port" text="8888" width="50"/>
        <s:Button label="Listen" click="listen()"/>
    </s:HGroup>
    
    <s:TextArea id="log" width="100%" height="100%" />

</s:WindowedApplication>


Window OS 의 경우
C:\Users\USERNAME\AppData\Roaming\APP_NAME\Local Store\webroot
디렉토리가 생성된다.

이 디렉토리 안에 웹서버에 실행시 보여줄 html 파일을 만들어 넣어두면 된다.

'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011/05/11
자신의 IP 외부에서 알아오기  (0) 2011/05/09
랜카드에 할당된 IP 알아내기  (0) 2011/05/09
자동 업데이트  (0) 2011/05/09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011/03/15
DockIcon Click 이벤트 처리  (0) 2011/03/04
Posted by sanghwa
ActionScript2011/05/09 16:46
자신의 IP 외부에서 알아오기 함수

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import mx.utils.StringUtil;

private var _ip:String = "127.0.0.1";
private var ipPattern:RegExp = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/;
private var externalIpSites:Array =  ["http://xxx.xxx.xxx/findMyIP.php", "http://www.whatismyip.com/automation/n09230945.asp"];

private function getExternalIp():void {
    var loader:URLLoader = new URLLoader();
    configureListeners(loader);
    var request:URLRequest = new URLRequest(externalIpSites.shift());
    try {
        loader.load(request);
    }
    catch (e:Error) {
        trace("IpAddress getExternalIp :", e);
    }
}

private function configureListeners(dispatcher:IEventDispatcher):void {
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
        
private function completeHandler(e:Event):void {
    var loader:URLLoader = URLLoader(e.target);
    var tmpIP:String = StringUtil.trim(loader.data);
    var ipCheck:int = -1;
    ipCheck = tmpIP.search(Config.ipPattern);
    if (ipCheck == 0) {
        _ip = tmpIP;
    }
}
        
private function errorHandler(e:IOErrorEvent):void {
    if (externalIpSites.length <= 0) {
        trace("IpAddress errorHandler :", e);
    }
    else {
        getExternalIp();
    }
}


'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011/05/11
자신의 IP 외부에서 알아오기  (0) 2011/05/09
랜카드에 할당된 IP 알아내기  (0) 2011/05/09
자동 업데이트  (0) 2011/05/09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011/03/15
DockIcon Click 이벤트 처리  (0) 2011/03/04
Posted by sanghwa
ActionScript2011/05/09 14:25
랜카드에 할당된 IP 알아내기 함수

import flash.net.InterfaceAddress;
import flash.net.NetworkInterface;

private var _ip:String = "127.0.0.1";
private var ipPattern:RegExp = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/;

private function getLanCardIp():void {
    var interfaces:Vector.<NetworkInterface> = new Vector.<NetworkInterface>();
    interfaces = NetworkInfo.networkInfo.findInterfaces();
    
    var ipCheck:int = -1;

    for each (var netf:NetworkInterface in interfaces) {
        var addresses:Vector.<InterfaceAddress> = netf.addresses;
        for each (var interfaceAddress:InterfaceAddress in addresses) {
            ipCheck = interfaceAddress.address.search(ipPattern);
            if (ipCheck == 0) {
                if (interfaceAddress.address.indexOf("169.254.") != 0 && interfaceAddress.address.indexOf("127.0") != 0) {
                    _ip = interfaceAddress.address;
                    break;
                }
            }
        }
    }
}


'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011/05/11
자신의 IP 외부에서 알아오기  (0) 2011/05/09
랜카드에 할당된 IP 알아내기  (0) 2011/05/09
자동 업데이트  (0) 2011/05/09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011/03/15
DockIcon Click 이벤트 처리  (0) 2011/03/04
Posted by sanghwa

티스토리 툴바