Flash-клиент XMLSocket не подключается к серверу

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

Решение

Это оказалось проблемой безопасности. 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>
Другие вопросы по тегам