Search code examples
actionscript-3flashsocketsactionscript

Flash Socket connection from SWF hosted by a browser


I am attempting to use TCP Socket from Flash ActionScript. I am using a standard example provided by Adobe. Here is the code:

// Load policy file from remote server.
Security.loadPolicyFile("http://" + serverURL + "/crossdomain.xml");
// Attempt to connect to remote socket server.
try {
    msg("Trying to connect to " + serverURL + ":" + portNumber + "\n");
    socket.connect(serverURL, portNumber);
} catch (error:Error) {
    /*
        Unable to connect to remote server, display error 
        message and close connection.
    */
    msg(error.message + "\n");
    socket.close();
}

My crossdomain.xml file located on port 80:

<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFileSocket.xsd">
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>

When I load application, I see in my inspector that it accesses the policy file successfully. However Event.CONNECT is never called. I have tried opening various different ports on various domains including same domain with no luck. Tried different policy files.

What am I missing?


Solution

  • If the allowscriptaccess is false you won't be able to bypass that so what you are missing is the adobe policy server.

    http://vvowproject.googlecode.com/svn-history/r41/trunk/server/flashpolicyd.py
    

    On the server open port 843 then use this command

    sudo ./flashpolicyd.py --file=crossdomain.xml --port=843
    

    here is the crossdomain.xml

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM
    "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
    
    <cross-domain-policy>
    <site-control permitted-cross-domain-policies="master-only"/>
    <allow-access-from domain="*"/>
    <allow-http-request-headers-from domain="*" headers="SOAPAction"/>
    </cross-domain-policy>
    

    This will definitely work, i tried it myself with your example.