Класс сокетов не работает на Flex SDK 4.5 - PullRequest
0 голосов
/ 01 июня 2011

Я переносю приложение из flex sdk 3.4 в flex sdk 4.5.

Я использую telnet-пример учебников AS3 в качестве основы для создания универсального класса сокетов, реализующего конкретный протокол.

Основная проблема заключается в том, что новое приложение с проверенным классом сокета не генерирует никаких событий (нет ошибок - нет подключений - нет данных - ничего).Функция catch с методом connect не выдает никаких ошибок.Я проверил, были ли события успешно подключены, но они не запускаются никогда.

Обновление: Я использовал предложения, чтобы изменить код.На самом деле, сейчас я получаю сообщение об ошибке в политике безопасности.

Это конструктор:

         public function GenericSocket(server:String, port:int, output:TextArea) {
            // set class variables to the values passed to the constructor.
            serverURL = server;
            portNumber = port;
            ta = output;

            // Create a new Socket object and assign event listeners.
            socket = new Socket();
            socket.addEventListener(Event.CONNECT, connectHandler);
            socket.addEventListener(Event.CLOSE, closeHandler);
            socket.addEventListener(ErrorEvent.ERROR, errorHandler);
            socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                    //Added by suggestions
                    socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            socket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);

            // Load policy file from remote server.
            Security.loadPolicyFile("http://" + serverURL + "/crossdomain.xml");
            // Attempt to connect to remote socket server.
            try {
                msg("Trying to connect to " + serverURL + ":" + portNumber + "\n");
                socket.connect(serverURL, portNumber);
            } catch (error:Error) {
                /*
                Unable to connect to remote server, display error 
                message and close connection.
                */
                msg(error.message + "\n");
                socket.close();
            }
        }

Это connectHandler, securityErrorHandler и ioErrorHandler (никогда не вызывается Обновление: Обработчик безопасности называется beign)

        private function connectHandler(event:Event):void {
            if (socket.connected) {
                msg("connected...\n");
            } else {
                msg("Error: unable to connect\n");
            }
        }

//Added by suggestions

private function securityErrorHandler(event:SecurityErrorEvent):void {
            msg("securityErrorHandler: " + event+"\n");
        }

        public function ioErrorHandler(event:IOErrorEvent):void {
            msg("Error: Unable to connect: socket error.\n");
        }

Некоторые идеи или директивы могут быть полезны.Может быть, какой-нибудь тест, чтобы попробовать общий сокет?может быть, тип приложения?

Обновление: Полученная ошибка:

securityErrorHandler: [SecurityErrorEvent type = "securityError" bubbles = false, отменить= false eventPhase = 2 text = "Ошибка # 2048"]

Я использую эти включения в проекте:

           xmlns:mx="http://www.adobe.com/2006/mxml" 
           xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:mx2="library://ns.adobe.com/flex/mx"

1 Ответ

1 голос
/ 02 июня 2011

Здесь вы можете найти ответ, который я дал некоторое время назад на ту же проблему, что и у вас.Обязательно прочитайте комментарии и перейдите по ссылкам, на одной из ссылок есть хороший пример / учебник.Это в основном связано с тем, как вы обслуживаете политику безопасности, вы должны обслуживать ее через сокет после того, как приложение отправит запрос на нее через порт 843. Для этого вам, конечно, нужно серьезное приложение, которое не может обслуживатьвеб-сервер через HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...