Flash XMLSocket + patServer (Flash не видит PHP Socket...)

  • Автор темы Tyler Durden
  • Дата начала

Tyler Durden

Guest
Flash XMLSocket + patServer (Flash не видит PHP Socket...)

Мой вопрос касается взаимодействия объекта XMLSocket (Macromedia Flash) с HTTP-сервером. В качестве HTTP-сервера я выбрал patServer.

Возможно, кто-то из вас не знаком с patServer...
http://www.php-tools.de/site.php?file=patServer/overview.xml

В общем, задача ставилась следующая:
- Запустить patServer (у меня Apache 1.3.26, PHP 4.3.5, WinXP);
- Установить соединение между фильмом Flash и patServer;
- Произвести обмен данными.

Не буду полностью приводить текст программы patServer'а... Вкратце, socket должен запускаться вот так:

PHP:
<?php

class myServer
{
    var $host = "localhost";
    var $port = 5555;
    var $maxQueue = 500;

    function myServer( $host, $port )
    {
        $this->host = $host;
        $this->port = $port;
        set_time_limit( 0 );
    }

    function start()
    {
        $this->initFD = @socket_create( AF_INET, SOCK_STREAM, 0 );
        socket_setopt( $this->initFD, SOL_SOCKET, SO_REUSEADDR, 1 );
        socket_bind( $this->initFD, $this->host, $this->port );
        socket_listen( $this->initFD, $this->maxQueue );
        /*Пишем Лог о запуске сервера*/
        while( true )
        {
            $readFDs = array();
            array_push( $readFDs, $this->initFD );
            $ready = @socket_select( $readFDs, array(), array(), NULL );
            /*... и так далее*/
        }
    }
}

$httpServer = new myServer( "localhost", 5555 );
$httpServer->start();

?>
В фильме Flash создаем объект socket = new XMLSocket(). Прописываем для него метод Connect... Все это выглядит так:

socket = new XMLSocket();
socket.connect( null, 5555 );

null - означает, что соединение будет осуществляться для того хоста, откуда был загружен фильм Flash. В моем случае - это "localhost" или "127.0.0.1".

Короче, запускаю я всю эту канитель на своей машине... patServer запускается (в Логах все нормально, типа "Server started..."), Flash соединяется просто замечательно, отправляет данные серверу и получает их обратно... Но, как только я закачал все необходимые файлы и запустил их у провайдера, Flash отказался соединяться с patServer'ом. У провайдера Linux.

Я ничего не менял. В логах на сервере провайдера записано, что сокет для выбранного порта запущен... Самое обидное, что в памяти сервака у провайдера висят уже два моих процесса для разных портов... :( Удалить их я никак не могу и соединиться тоже... А там стоит set_time_limit( 0 )... Так что же, они там теперь вечно висеть будут?! Я могу их закрыть только соединившись с фильмом Flash...

Объясните, пожалуйста, почему возникла эта проблема? Почему Flash может не видеть созданный socket? :confused:

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

Screjet

Новичок
..Самое обидное, что в памяти сервака у провайдера висят уже два моих процесса для разных портов... Удалить их я никак не могу и соединиться тоже... А там стоит set_time_limit( 0 )... Так что же, они там теперь вечно висеть будут?! Я могу их закрыть только соединившись с фильмом Flash...
В любом случае необходимо связаться с системным администратором провайдера и уточнить насчет файервола, вероятно нужные порты отфильтрованы и/или не разрешено листать собственные порты.

зы. Надеюсь, вы не забыли исправить в рабочем коде "localhost" на реальный адрес интерфейса?
 

voodoo

Новичок
а телнетом-то получается подключиться?
если да, то, видимо, секьюрити ограничения.
 

Tyler Durden

Guest
Localhost везде поисправлял на ip-шник сайта...

Я написАл, что уже два процесса "висят" в памяти - один с localhost'ом, другой - с ip-шником сайта. И ни к одному Flash не коннектится...

Что именно мне следует уточнить по поводу файервола? А телнета у провайдера в "сервисах" нет или нужно какую-то прогу для телнета скачивать?

P.S. вчера в памяти провайдера повис третий процесс... ;) Придется убирать set_time_limit( 0 )...
 
Сверху