Flash-клиент XMLSocket не подключается к серверу - PullRequest
2 голосов
/ 30 июля 2009

У меня есть Flash-клиент, который я хочу подключить к серверу. Оба используют localhost и порт 50000, поэтому не должно быть никаких междоменных проблем. Я также установил Доступ к сети только в настройках публикации. Когда я вызываю соединение XMLSocket, сервер, кажется, получает новое соединение. Но обратный вызов XMLSocket.onConnect не вызывается с успехом = true.

Есть идеи, что может быть не так?

Вот код 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 Ответ

4 голосов
/ 30 июля 2009

Это закончилось проблемой безопасности. Flash Player имеет дополнительную безопасность при использовании XMLSocket. Flash Player теперь ищет файл политики на порту 843. В качестве альтернативы можно заставить swf искать файл политики с помощью вызова Security.loadPolicyFile(). Если файл существует и все параметры безопасности разрешают использование XMLSocket, то соединение создано.

Ознакомьтесь с статьей Adobe о файлах политики и дополнительной информацией здесь . Это еще одна хорошая статья о файлах политики .

Вот файл политики, который наконец-то сработал для меня. Это совсем не ограничительно. Но я подумал, что все работает, а потом все исправлю.

<?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>
...