ServerSocket 클래스를 통해 Air 2 Server를 만들고 싶습니다. (아래 예제 코드가 있습니다).Air 2 ServerSocket Crossdomain 문제
제약 :
- 서버가 공기에 있어야합니다
- 클라이언트는 웹 브라우저를 통해 표시해야
클라이언트는 클라이언트에 대한 연결을 설정하려는 그래서 웹 브라우저로 표시됩니다 Air 서버, Flash는 소켓을 통해 크로스 도메인 요청을 보내고 서버는 서버로 다시 보냅니다.
As3Doc은 플래시가 크로스 도메인 요청을 전송할 때 서버가이를 되돌려 보내야한다는 것을 지정합니다. 그런 다음 crossdomain이 올바르면 서버가 연결을 닫고 새 연결을 엽니 다.
다른 설정을 시도했지만 아무런 효과가 없으므로 클라이언트는 CONNECTED의 이벤트를받지 못합니다.
아이디어가 있으십니까?
서버 측 코드 :
<?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" initialize="init()">
<s:TextArea x="0" y="0" width="100%" height="100%" id="log"/>
<fx:Script>
<![CDATA[
private var _server : ServerSocket = new ServerSocket;
private function init() : void
{
_server.bind(4500, "127.0.0.1");
_server.addEventListener(ServerSocketConnectEvent.CONNECT, onClientConnection);
_server.listen();
}
private function onClientConnection(e : ServerSocketConnectEvent) : void
{
var socket : Socket = e.socket;
log.appendText("Client connected : " + socket.localAddress + ":" + socket.localPort + "\n");
socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
}
private function onData(e:Event) : void
{
var socket : Socket = e.target as Socket;
log.appendText("Data : " + socket.readUTFBytes(socket.bytesAvailable));
socket.writeUTF(
'<cross-domain-policy>' +
' <allow-access-from domain="*" to-ports="4500" />' +
'</cross-domain-policy>'
+ String.fromCharCode(0)
);
socket.writeByte(0);
socket.flush();
socket.close();
}
]]>
</fx:Script>
</s:WindowedApplication>
클라이언트 측 코드 :
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.Socket;
import flash.text.TextField;
import flash.utils.setTimeout;
public class TestClient extends Sprite
{
private var log : TextField;
private var _socket : Socket;
public function TestClient()
{
log = new TextField;
log.width = stage.stageWidth;
log.height = stage.stageHeight;
addChild(log);
_socket = new Socket;
_socket.addEventListener(Event.CONNECT, onConnection);
_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
_socket.addEventListener(IOErrorEvent.IO_ERROR, onError);
tryConnection();
}
private function tryConnection() : void
{
log.appendText("Try connection ... \n");
_socket.connect("127.0.0.1", 4500);
}
private function onConnection(e : Event) : void
{
log.appendText("Connected !");
}
private function onError(e : Event) : void
{
log.appendText(e.toString() + "\n");
setTimeout(tryConnection, 1000);
}
}
}
너무 가까이서 : '( –