웹서버 예제
Window OS 의 경우
C:\Users\USERNAME\AppData\Roaming\APP_NAME\Local Store\webroot
디렉토리가 생성된다.
이 디렉토리 안에 웹서버에 실행시 보여줄 html 파일을 만들어 넣어두면 된다.
<?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 |