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>