2009-07-30 5 views
2

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

Выглядит хорошо, но я подозрительно отношусь к «локальному хосту». Попробуйте использовать null (для Документации ActionScript для соединения «того же компьютера») и посмотрите, работает ли это. –

+0

Я запускаю его во Flash-отладчике, и он немедленно подключается. Интересно, есть ли параметр безопасности, который мне нужен для работы в браузере. Он не работает в IE или Firefox. – zooropa

+0

Просто для funzies, я также попытался переключить параметр публикации только для доступа к локальным файлам. Не работает. – zooropa

ответ

4

Это оказалось проблемой безопасности. Flash Player добавила безопасность при использовании XMLSocket. Flash Player теперь ищет файл политики на порту 843. Альтернативой является просмотр swf файла политики с помощью вызова Security.loadPolicyFile(). Если файл существует и все параметры безопасности разрешают 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> 
Смежные вопросы