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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

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

Регистрация: Jan 2007
Сообщений: 76
По умолчанию Проблемы с Perl-сокетом

Значит, нашёл в интернете код для сокет-сервера на Perl:

PHP код:
 # This is an XMLSocket multiuser server, for use with Flash 5
        # If you don't know what XMLSocket is, you shouldn't be using
        # this program.  

        
use IO::Socket;
        use 
IO::Select;

        
# Set the input terminator to a zero byte string, pursuant to the
        # protocol in the flash documentation.
        
$/ = "\0";
        
        
# Create a new socket, on port 7777
        
$lsn = new IO::Socket::INET(Listen => 1
                                    
LocalPort => 7777,
                                    
Reuse => 1,
                                    
Proto => 'tcp' )
           or die (
"Couldn't start server: $!");

        
# Create an IO::Select handler
        
$sel = new IO::Select($lsn);

        
# Close filehandles

        
close(STDIN); close(STDOUT);

        
warn "Server ready.  Waiting for connections . . . \n";

        
# Enter into while loop, listening to the handles that are available.
        
while( @read_ready $sel->can_read ) {

            foreach 
$fh (@read_ready) {
                
# Create a new socket
                
if($fh == $lsn) {
                    
$new $lsn->accept;
                    
$sel->add($new);
                    
push( @datafileno($new) . " has joined.");
                    
warn "Connection from " $new->peerhost ".\n";
                }

                
# Handle connection
                
else {
                    
$input = <$fh>;
                    
                    
chomp $input;
                    if ( 
$input eq '') {
                        
push( @datafileno($fh) . " has left.");
                        
warn "Disconnection from " $new->peerhost ".\n";                
                        
$sel->remove($fh);
                        
$fh->close;
                    }
                    else {
                        
$output fileno($fh) . ": $input";
                        
push( @data$output );

                    }
                }

            }

            
# Write to the clients that are available
            
foreach $fh ( @write_ready $sel->can_write(0) ) {
                foreach 
$line (@data) {
                    print 
$fh "$line \0";
                }
            }
                
            
undef @data;

        }

        
warn "Server ended.\n"
При тестировании из Flash IDE сервер работает нормально, то есть в консоли выводятся такие сообщения:

Connection from 127.0.0.1 -- при подключении
Disconnection from 127.0.0.1 -- при отключении


Если же тестировать из браузеров то вывод будет таким:

Connection from 127.0.0.1 -- при подключении
Disconnection from 127.0.0.1
Connection from 127.0.0.1

Disconnection from 127.0.0.1 -- при отключении


То есть сокет подключается, сразу же отключается, а потом опять подключается... В этом собственно вопрос - почему так происходит и как это исправить?

Старый 13.03.2008, 00:22
LinuxVideo вне форума Посмотреть профиль Найти все сообщения от LinuxVideo
  № 2  
Ответить с цитированием
LinuxVideo
Banned

Регистрация: Oct 2007
Сообщений: 269
Прибить аутпост, это один из его глюков
Если его нет, то смотреть трафик

Старый 01.04.2008, 02:21
Онтожка вне форума Посмотреть профиль Отправить личное сообщение для Онтожка Найти все сообщения от Онтожка
  № 3  
Ответить с цитированием
Онтожка

Регистрация: Jan 2007
Сообщений: 76
Проблема решена, это всё из-за новых секьюрити-фич девятого плеера (редиски эти адобы, редиски! .

По сути: при подключении хмл-сокет требует policy-файл с настройками о том, каким доменам и на какие порты можно коннектиться, но требует не просто там ссылку на policy-файл, а хочет чтобы ему сожержимое этого policy-файла по сокетному же соединению и передали, после этого сокетное соединение в любом случае закрывается (отсюда это connect-disconnect-connect), а далее флэш-плеер уже смотрит по policy-файлу - можно ли подсоединяться с указанными параметрами или нет.


В общем проблему можно решить двумя способами - либо настроить сокет-сервер так, что он будет с начала отрабатывать policy-запрос, а потом уже работать в нормальном режиме, либо нужно делать 2 соект-сервера, которые работают на 2 разных потрах (1-й просто возвращает policy-файл, второй - нормальный сокет-сервер), потом флэш-плееру дать указание грузить policy-файл с одного порта, а коннектиться уже к другому, вот так:

Код:
System.security.loadPolicyFile("xmlsocket://www.site.com:2000");
socket.connect('www.site.com', 2001);


Последний раз редактировалось Онтожка; 01.04.2008 в 02:26.
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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