2013-08-09 2 views
0

로컬 서버 쪽에서 C# 코드를 실행했습니다. 여기에 127.0.0.1/Socket.htm에게 Flash10-ActionScript3 : 소켓 서버에 연결할 수 없습니다.

public class WebSocket extends flash.display.Sprite 
{ 
    private var Socket:flash.net.Socket = new flash.net.Socket(); 

    public function WebSocket() 
    { 
     flash.system.Security.allowDomain("*"); 
     flash.system.Security.allowInsecureDomain("*"); 
     flash.system.Security.loadPolicyFile("PolicyFile.xml"); 
     this.Socket.addEventListener(flash.events.Event.CONNECT, Socket_Connect); 
     this.Socket.connect("127.0.0.1",4502); 
    } 

    private function Socket_Connect(event:Event):void 
    { 
     this.MyLabel.text= "The socket is now connected..." ; 
    } 
} 

을 "127.0.0.1/PolicyFile의 내용입니다 -
System.Net.Sockets.Socket server = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); 
server.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Any, 4502)); 
server.Listen(int.MaxValue); 
while (true) 
{ 
    System.Net.Sockets.Socket client = server.Accept(); 
    if (client.Connected) 
     client.Send(new byte[1]); 
} 

는 로컬 웹 페이지의 HTML 파일에 포함 된 SWF 파일을 만들었습니다. xml ":

<?xml version="1.0" encoding="utf-8"?> 
<cross-domain-policy> 
    <allow-access-from domain="*" /> 
</cross-domain-policy> 

코드는 오류없이 실행되지만 CONNECT 이벤트는 절대로 발생하지 않습니다.

사전에 도움을 주셔서 감사합니다.

답변

0

플래시의 소켓 연결에는 동일한 호스트에서 제공하는 정책 파일이 필요합니다. Flash Player는 정책 파일을 가져 오기 위해 대상 시스템에서 포트 843에 대한 소켓 연결을 자동으로 설정하려고 시도합니다. 일반 요청으로 정책 파일을로드하는 것만으로는 충분하지 않습니다.

당신은이 같은 다른 포트를 지정할 수 있습니다 : http://policyserver.codeplex.com : 당신은 .NET과 함께 작동하는 것으로

Security.loadPolicyFile("xmlsocket://127.0.0.1:1843"); 

을이 플랫폼에 대한 정책 서버입니다. 직접 정책 서버를 구현할 수도 있습니다. 연결 및 입력 문자열 <policy-file-request/>\0을 수신 대기하십시오. 그런 다음 XML을 출력하고 소켓을 닫습니다. 그러면 Flash Player는 연결을 설정합니다.

예 정책 XML :

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
<site-control permitted-cross-domain-policies="master-only"/> 
<allow-access-from domain="*" to-ports="4502" /> 
</cross-domain-policy> 

은 또한 당신의 소켓 (즉 SecurityErrorEvent.SECURITY_ERROR, IOErrorEvent.IO_ERROR, Event.CLOSE, ProgressEvent.SOCKET_DATA)에 대한 모든 관련 이벤트를 수신 있는지 확인하십시오.

+0

감사합니다. "정책 XML"은 '\ 0'으로 끝나야합니다. –

관련 문제