|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: May 2012
Сообщений: 24
|
Скоро повешусь с <policy-file-request/>
Пишу сервак на java. Поставил ServerSocket на 843 порту. Идет соединение и отправляется файл политики.
<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" to-ports="*"> </cross-domain-policy> с \u0000 на конце. Но флеш не посылает нужные мне строки на сервер после принятия файла политики. Либо я передаю че-то не правильно... либо я передаю че-то не правильно! Помогите плиз. |
|
|||||
Закрывает ли сервер соединение с клиентом после отправки ему политики?
Вот кроссдоменник: <?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" to-ports="*" meta-policy="master-only"/> </cross-domain-policy> import socket cross = open('crossdomain.xml').read() HOST = '' PORT = 843 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(32) while 1: conn, addr = s.accept() data = conn.recv(24) print 'Connected by', addr, data if not data: conn.close() else: conn.sendall(cross) conn.close() |
|
|||||
Механизм должен быть такой: флеш коннектится, получает файл политики, соединение закрывается сервером. Это должно быть сделано обязательно! А дальше можно уже производить новый коннект на любой другой порт.
То есть сервер логичнее всего разбить на 2 части. Чисто часть которая занимается отправкой файлов политики, и часть которая обрабатывает все остальное. |
|
|||||
Регистрация: May 2012
Сообщений: 24
|
Цитата:
import flash.system.Security; import flash.net.Socket; import flash.events.Event; import flash.events.SecurityErrorEvent; try { Security.loadPolicyFile("xmlsocket://localhost:843"); var socket:Socket = new Socket(); }catch(e:SecurityErrorEvent){ txt.text = e.text; } socket.connect("localhost",8010); socket.writeUTFBytes("ALL OK!!!"); Если swf не залит на серв, то лог сервера такой: 8010: CONNECT DATA: ALL OK!!! 8010: DISCONNECTED BY SERVER а если залит, то такой: 843: CONNECT 843: NEED POLICY FILE 843: DISCONNECTED BY SERVER 8010: CONNECT ошибку не выдает не понимаю я этого адобовского юмора security |
|
|||||
Если у вас на 843 порту сервера висит и слушает секьюрный скрипт, вроде того, что я привел, то достаточно на клиенте выполнить следующее:
// Создаем сокет _socket = new Socket(); // Определяем порядок байт _socket.endian = Endian.LITTLE_ENDIAN; // Добавляем прослушку события подключения. Только после наступления // этого события можно слать/принимать данные. _socket.addEventListener(Event.CONNECT, connectHandler); // Добавляем прослушку прочих событий. _socket.addEventListener(Event.CLOSE, closeHandler); _socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); _socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); // Начинаем установку соединения. Здесь _port - это не 843, а уже целевой // порт сервера (например, 8010, в вашем случае). _socket.connect(_host, _port); // Функция connectHandler выглядит примерно так: function connectHandler(e:Event):void { // Здесь просто вывод сообщения о том, что соединение установлено. Debug.out("Connection established."); } |
|
|||||
listener
|
loadPolicyFile не приводит к немедленной загрузке файла политик из альтернативного источника. Это указание на дополнительное действие "возьми-ка политики не только с 843 порта, а еще и тут до кучи, когда будешь коннектиться к серверу".
В этом контексте Security.loadPolicyFile("xmlsocket://localhost:843"); - бессмысленный код (да еще и в try-catch). Более того, видимо, вредный : после возможно успешного дефолтного запроса на 843 порт, сервер закрывает коннект, а плеер, согласно указанию в коде, опять туда стучится, но таймаутов тут уже нет и клиент успешно засыпает в ожидании "дополнительных" политик. Шутка, но в каждой шутке есть доля сами знаете чего. Протестите сервер на предмет отдачи политик и уберите loadPolicyFile, воспользуйтесь примером bav'a создания коннекта с подпиской на события. И да, самостоятельный демон-скрипт, которые спокойно слушает 843 порт, раздает политики, и позволяет не забивать себе голову этим "юмором" - тоже отличная идея. _________ И еще, эмоции эмоциями, но вот ругань в заголовке темы, равно как и в постах, крайне не приветствуется. |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Цитата:
И заодно разберитесь с исключениями и событиями. SecurityErrorEvent не выбрасывается штатными функциями, это событие, на него нужно подписываться. |
Часовой пояс GMT +4, время: 12:27. |
|
« Предыдущая тема | Следующая тема » |
|
|