2009-07-30 5 views
2

서버에 연결하려는 플래시 클라이언트가 있습니다. 둘 다 localhost와 포트 50000을 사용하므로 도메인 간 문제가 없어야합니다. 또한 게시 설정에서 액세스 네트워크 만 설정했습니다. 내가 XMLSocket을 호출 할 때, 서버는 새로운 연결을 얻는 것처럼 보입니다. 그러나 success = true로 XMLSocket.onConnect 콜백이 호출되지 않습니다.플래시 클라이언트 XMLSocket이 서버에 연결되지 않음

무엇이 잘못 되었을지에 대한 아이디어가 있으십니까?

다음은 소켓을 만들기위한 ActionScript입니다.

function myOnConnect(success) { 
    if (success) { 
     trace ("Connection succeeded!") 
     inputText.text = "open"; 
//  socket.send("1\n"); 
     gotoAndPlay(2); 
    } else { 
     trace ("Connection failed!") 
     inputText.text = "failed"; 
    } 
} 


btnConnect.onRelease = function() 
{ 
    inputText.text = "started"; 


    result = socket.connect("localhost", 50000); 


} 

socket = new XMLSocket(); 
socket.onConnect = myOnConnect; 
+1

괜찮아 보이지만 "localhost"에 대해 의심 스럽습니다. null ("동일한 시스템"연결에 대한 ActionScript 문서 도구 별)을 사용해보십시오. –

+0

플래시 디버거에서 실행하면 바로 연결됩니다. 브라우저에서 작동하는 데 필요한 보안 설정이 있는지 궁금합니다. IE 나 Firefox에서는 작동하지 않습니다. – zooropa

+0

놀랍지 만 게시 설정을 로컬 파일에만 액세스로 전환 해 보았습니다. 일하지 않았어. – zooropa

답변

4

결국 보안 문제가 발생했습니다. Flash Player에서는 XMLSocket을 사용할 때 보안이 강화되었습니다. 이제 Flash Player는 포트 843에서 정책 파일을 찾습니다. 대안은 Security.loadPolicyFile()이라는 호출을 사용하여 swf가 정책 파일을 찾도록하는 것입니다. 파일이 존재하고 모든 보안 설정이 XMLSocket을 허용하면 연결이 작성됩니다.

Adobe article on Policy files 및 자세한 정보 here을 확인하십시오. 이것은 다른 좋은 기사 about policy files입니다.

다음은 마지막으로 나를 위해 작동 한 정책 파일입니다. 그것은 제한적이지 않습니다. 그러나, 나는 일을 얻고 그 일을 올바르게한다고 생각했습니다.

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd"> 

<!-- Policy file for xmlsocket://socks.example.com --> 
<cross-domain-policy> 

    <!-- This is a master socket policy file --> 
    <!-- No other socket policies on the host will be permitted --> 
<!-- <site-control permitted-cross-domain-policies="all"/> --> 

    <!-- Instead of setting to-ports="*", administrator's can use ranges and commas --> 
    <!-- This will allow access to ports 123, 456, 457 and 458 --> 
    <allow-access-from domain="*" to-ports="*" secure="false"/> 

</cross-domain-policy>