Питон сервер:
Код:
import asyncore
import socket
class EchoHandler(asyncore.dispatcher_with_send):
def handle_read(self):
data = self.recv(1024)
if data:
print 'Received',repr(data)
if(str(repr(data)).find('<policy-file-request/>')!=-1):
print 'received policy'
data = "<?xml version=\"1.0\"?>";
data += "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">";
data += "<cross-domain-policy>";
data += "<allow-access-from domain=\"*\" to-ports=\"*\" />";
data += "</cross-domain-policy>\u0000";
self.send(data)
else:
self.send(data)
class EchoServer(asyncore.dispatcher):
def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind((host, port))
self.listen(5)
def handle_accept(self):
pair = self.accept()
if pair is None:
pass
else:
sock, addr = pair
print 'Incoming connection from %s' % repr(addr)
handler = EchoHandler(sock)
server = EchoServer('', 843)
asyncore.loop()
Флеш:
Код AS3:
var serverURL = "127.0.0.1";
Security.allowDomain(serverURL);
Security.loadPolicyFile("xmlsocket://"+serverURL+":843");
trace("loaded policy");
var xmlSocket:XMLSocket = new XMLSocket();
xmlSocket.connect(serverURL, 843);
xmlSocket.addEventListener(DataEvent.DATA, onIncomingData);
xmlSocket.addEventListener(Event.CONNECT, onConnect);
stage.addEventListener(MouseEvent.CLICK, onConnect);
function onIncomingData(event:DataEvent):void
{
trace("[" + event.type + "] " + event.data);
}
function onConnect(event:Event):void
{
xmlSocket.send("Hello World\n");
}
Проблема в то, что если запускать флешку из редактора то все работает, а если закинуть на локальный веб-сервер то видим только:
Incoming connection from ('cl.ie.nt.ip', 40567)
Received '<policy-file-request/>\x00'
received policy