Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.04.2008, 21:45
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 1  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
По умолчанию socket: чтение сообщений с сервера

написал я наконец свой первый сервер И теперь хочу повесить на него флэшку..
код из хелпа:
Код:
package main{
    import flash.display.Sprite;

    public class Index extends Sprite {

        public function Index() {
            var socket:CustomSocket = new CustomSocket("localhost", 31337);
        }
    }
}

import flash.errors.*;
import flash.events.*;
import flash.net.Socket;

class CustomSocket extends Socket {
    private var response:String;

    public function CustomSocket(host:String = null, port:uint = 0) {
        super(host, port);
        configureListeners();
    }

    private function configureListeners():void {
        addEventListener(Event.CLOSE, closeHandler);
        addEventListener(Event.CONNECT, connectHandler);
        addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
    }

    private function writeln(str:String):void {
        str += "\n";
        try {
            writeUTFBytes(str);
        }
        catch(e:IOError) {
            trace(e);
        }
    }

    private function sendRequest():void {
        trace("sendRequest");
        response = "";
        writeln("hello :)");
        flush();
    }

    private function readResponse():void {
        var str:String = readUTFBytes(bytesAvailable);
        response += str;
    }

    private function closeHandler(event:Event):void {
        trace("closeHandler: " + event);
        trace(response.toString());
    }

    private function connectHandler(event:Event):void {
        trace("connectHandler: " + event);
        sendRequest();
    }

    private function ioErrorHandler(event:IOErrorEvent):void {
        trace("ioErrorHandler: " + event);
    }

    private function securityErrorHandler(event:SecurityErrorEvent):void {
        trace("securityErrorHandler: " + event);
    }

    private function socketDataHandler(event:ProgressEvent):void {
        trace("socketDataHandler: " + event);
        readResponse();
    }
}
Сервер выводит две строки, приветственную и при выполнении команды.
Данный код ведет себя довольно странно: при первом подключении ничего не пишет и остается ждать ответа от сервера, при последующих подключениях выводит приветственное сообщение и отключается. Команда в обоих случаях выполняется.
Мне же надо, чтобы сокет считывал обе строки и оставался ждать ответа от сервера.
__________________
Пора бы мне уже умнеть..

Старый 14.04.2008, 14:14
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 2  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Твой сокет может убиваться сборщиком мусора.
Попробуй локальную переменную socket заменить на переменную класса.
__________________
http://realaxy.com

Старый 14.04.2008, 20:07
vapes вне форума Посмотреть профиль Отправить личное сообщение для vapes Найти все сообщения от vapes
  № 3  
Ответить с цитированием
vapes
 
Аватар для vapes

блогер
Регистрация: Nov 2006
Адрес: Минск
Сообщений: 370
Записей в блоге: 6
Отправить сообщение для vapes с помощью ICQ Отправить сообщение для vapes с помощью Skype™
Доброго все мвремени суток, может кто-нибудь поможет мне разобраться с секьюрити для сокет соединения и обновлением для флеш плеера 9,0,155?
Из того, что я знаю:
существует 2 вида кроссдоменной хмл :
1- для загрузки флешек, картинок, музыки
2- для общения с сервером по сокетах (о чем и пойдет далее речь)
SWF файл я выложил у себя на апаче http://localhost/drag.swf
При попытке флешки присоединится к моему ява серверу (localhost,6666) флеш плеер сначала требует кроссдомеину на портах 6666 и 843 ,что сервер ему с радостью и отдает
Код:
  if (str.contains("policy-file-request")) {
            System.out.println("cross domain request was accepted. i will send u crossdomain.xml.");
            sendToSocket("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"6666\" /></cross-domain-policy>\0", null);
            return;
        }
но флеш плеер выводит в лог, что ничего не получил
Код:
Warning: Timeout on xmlsocket://localhost:843 (at 3 seconds) while waiting for socket policy file.  This should not cause any problems, but see http://www.adobe.com/go/strict_policy_files for an explanation.
Warning: Timeout on xmlsocket://localhost:6666 (at 3 seconds) while waiting for socket policy file.  This should not cause any problems, but see http://www.adobe.com/go/strict_policy_files for an explanation.
Error: SWF from http://localhost/drag.swf may not connect to a socket in its own domain without a policy file.  See http://www.adobe.com/go/strict_policy_files to fix this problem.
*** Security Sandbox Violation ***
securityErrorHandler: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Security sandbox violation: http://localhost/drag.swf cannot load data from localhost:6666."]
Подскажите пожалуйсто, что не так. Заранее спасибо.

Старый 14.04.2008, 23:22
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А loadPolicyFile вызывается?

Старый 14.04.2008, 23:23
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 5  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
может лучше отдельную тему создать, тут речь идет не об хмл сокетах..

Все дело было в сервере. Что бы флэш прочитал строку она должна оканчиваться \r, а у меня заканчивалась \n.. не зря в примере, в конце стоит \r\n..(но я подумал нафиг надо.. первоначальный клиент работал и без \r).
вопрос: что делает метод flush()?
Цитата:
Flushes any accumulated data in the socket's output buffer.
не могу понять что это значит..
__________________
Пора бы мне уже умнеть..

Старый 15.04.2008, 01:02
kononencheg вне форума Посмотреть профиль Отправить личное сообщение для kononencheg Найти все сообщения от kononencheg
  № 6  
Ответить с цитированием
kononencheg

Регистрация: Jan 2008
Сообщений: 9
О! кстати схожая проблема и столкнулся сегодня.
SecurityError в любом (!) случае вызывается для всех портов кроме 80 (на который нельзя создать сокет сервер) из браузера.
Флешка отдельно прекрасно соединяется с сервером.
Ну конечно с учетом кроссдомейна.хмл

А еще тонкий момент - флешка ДОЛЖНА лежать в директории локалхоста! В под-папках даже отдельно флеха не пашет.

Старый 15.04.2008, 01:10
kononencheg вне форума Посмотреть профиль Отправить личное сообщение для kononencheg Найти все сообщения от kononencheg
  № 7  
Ответить с цитированием
kononencheg

Регистрация: Jan 2008
Сообщений: 9
Извините за оффтопик.
2 Ноябрь:
Твой сервак тоже жрет почти всю процессорную память?

Старый 15.04.2008, 03:12
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 8  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
нет.. абсолютно не загружает..
сервак на руби, 2 клиента на руби, 3 флэшки (типа чат) совершенно не загружают проц (я вообще полагаю в том и прикол, что не нагружает проц, в отличии от рефрешей..).
У меня другая проблема - не могу обновить массив клиентов после отключения одного из них, но, надеюсь скоро разберусь..
а потом пойму и что такое flush()..
__________________
Пора бы мне уже умнеть..

Старый 15.04.2008, 12:09
vapes вне форума Посмотреть профиль Отправить личное сообщение для vapes Найти все сообщения от vapes
  № 9  
Ответить с цитированием
vapes
 
Аватар для vapes

блогер
Регистрация: Nov 2006
Адрес: Минск
Сообщений: 370
Записей в блоге: 6
Отправить сообщение для vapes с помощью ICQ Отправить сообщение для vapes с помощью Skype™
Цитата:
Сообщение от __etc
А loadPolicyFile вызывается?
Насколько я знаю, то можно и без него, но на всякий случай я сделал так:
Код:
	socket = new XMLSocket();
        configureListeners(socket);
        Security.loadPolicyFile("xmlsocket:localhost:6666");
        socket.connect(hostName, port);
гружу его по xml сокету, правда не знаю, можно ли локально

Старый 15.04.2008, 12:59
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от vapes
Код:
Security.loadPolicyFile("xmlsocket:localhost:6666");
Где вы в документации видели такой url?

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:35.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.