![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Могу посоветовать пойти таким же путём, каким пошел я =)
То есть написать собственный тестовый сервер на уже знакомом AS3 используя AIR 2. (Должен быть flash cs 5) Тогда все будет выглядеть примерно так: На сервере : public class NetI extends EventDispatcher{ public static const policefile : XML = new XML('<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><allow-access-from domain="*" to-ports= "*"/></cross-domain-policy>'); const authPort : uint = 843; const commPort : uint = 2000; var connectedClients : Vector.<Socket>; var authSocket : ServerSocket; var servMsgsSocket : ServerSocket; public function NetI(){ authSocket = new ServerSocket(); authSocket.bind(authPort); servMsgsSocket.bind(commPort); authSocket.addEventListener(ServerSocketConnectEvent.CONNECT, authSocketConnectHandler); servMsgsSocket.addEventListener(ServerSocketConnectEvent.CONNECT, servMsgsSocketConnectHandler); } public function start():void{ try{ authSocket.listen(); trace("Server started"); } catch (error : Error){ trace("Произлшла ошибка при открытии сокетов " + errror); } } private function authSocketConnectHandler(event : ServerSocketConnectEvent):void{ var socket : Socket = event.socket as Socket; socket.addEventListener(ProgressEvent.SOCKET_DATA, authSocketDataHandler); trace("К порту передачи файла политик подключился (" + socket.remoteAddress + ":" + socket.remotePort + ")" ); } private function authSocketDataHandler(event : ProgressEvent):void{ var socket : Socket; var message : String; var bytesAvaliable : uint; var response : String; socket = event.currentTarget as Socket; bytesAvaliable = socket.bytesAvailable; message = socket.readUTFBytes(bytesAvaliable); if(message == '<policy-file-request/>'){ response = NetI.policefile; socket.writeUTFBytes(response); trace("Файл политики выдан (" + socket.remoteAddress + ":" + socket.remotePort + ")" ); socket.flush(); socket.close(); }else{ trace("Неверный запрос политики от (" + socket.remoteAddress + ":" + socket.remotePort + ") = " + message); } } private function servMsgsSocketConnectHandler(event : ServerSocketConnectEvent):void{ var socket : Socket; socket = event.socket as Socket; socket.addEventListener(Event.CLOSE, closeSocketHandler); socket.addEventListener(ProgressEvent.SOCKET_DATA, msgSocketDataHandler); trace("К порту передачи сообщений подключился (" + socket.remoteAddress + ":" + socket.remotePort + ")" ); connectedClients.push(socket); } private function msgSocketDataHandler(event : ProgressEvent):void{ // ну а здесь уже читаешь посланное клиентом сообщение с сокета // например таким же образом как мы читали полис файл реквест } } Если не хочется создавать два сокета, то можно сразу коннектиться клиентом к 2000 и выдавать там файл. Последний раз редактировалось ChuwY; 05.10.2010 в 17:33. |
|
|||||
|
Цитата:
Когда флешка сомневается в безопасности, она кидает на сервер вот это: <policy-file-request/> и ждёт что сервер выплюнет ей содержание кроссдомейника. После этого флешка закрывает это соединение и тотчас поднимает новое, с которым уже работаешь ты. Для тебя это выглядит одной строчкой - socket.connect. P.S. 843 порт лично для меня мифические цифры. За свою практику всегда работал с другими и всё было хорошо. P.P.S. Ещё у меня когда host указывался доменом (типа vasya.ru) - флешка отказывалась коннектится. Всегда требовала ручного вбивания IP-адреса.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Psycho Tiger, а 80 и 8080 порты для тебя тоже мифические цифры ? =)
И соединение, вроде как, лучше на сервере закрывать, ибо быстрее переконнект произойдет. Разве нет? |
|
|||||
|
ChuwY, мифические цифры значат что у меня и без них работает. Может плохо, но порты не мне выбирать. Я клиентщик - что будет "быстрее" я не знаю: весь этот обмен сертификатами происходит прозрачно для меня.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Спасибо всем за участие. Дома добрался до Мука, перечитал еще раз главу про безопасность, все по полочкам разложено как работать с сокетами. В очередной раз порадовался что не поскупился и купил книжку.
В принципе все что пробовал все должно работать, за одним маленьким требованием. Сервер при запросе из места отличного от домена и порта в котором запускается подключение к сокету, должен присылать файл разрешение от распространителя. Судя по всему тот самописный сокет, что мы собрали попросту этого не делает). Попрошу программиста внести требуемые модификации и буду надеяться что все заработает)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|