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

티스토리 툴바