php сокеты и flash

webman

Новичок
php сокеты и flash

пытаюсь написать сокет сервер на пхп(чат), клиентская часть - флешка

проблема такая, запускаем скрипт, запускаем флешку, отправляем первое сообщение, отправляется... отправляем второе сообщение, не приходит обратно... запускаем во второе окошко флешку, приходит сообщение из первого окна которое не отобразилось, отправляем сообщение,возвращается, а после этого все... тишина...
подскажите где не прав, просто не могу понять в чем проблема
PHP:
<?php

$address = '127.0.0.1';
$port = 5190;
$max_clients = 100;

// массив клиентов
$client = Array();
//массив ожидания чтения из сокетов
$read=Array();

// создаем сокет
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// связываем имя с сокетом
socket_bind($sock, $address, $port) or die('Could not bind to address');
// прослушиваем соединения
socket_listen($sock);

//зацикливаем соединение
while (true) {
        //принемаем соединения на сокете и пишем в массив ресурсы
        for ($i = 0; $i < $max_clients; $i++){
                if ((!isset($client[$i]['sock']))||($client[$i]['sock'] == null)){
                        $client[$i]['sock'] = socket_accept($sock);
                        break;
                }
        }
        //ждем сообщения на сокетах
        for($i=0;$i<$max_clients; $i++){
                if((isset($client[$i]['sock']))&&($client[$i]['sock'] != null)){
                        if (false === ($buf = socket_read($client[$i]['sock'], 2048, PHP_NORMAL_READ))) {
                                echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n";
                                break 3;
                        }
                        $buf=trim($buf);
                        if ($buf == 'quit') {
                                socket_close($client[$i]['sock']);
                                unset($client[$i]);
                        }
                        if ($buf == 'shutdown') {
                                break 2;
                        }
                        if($buf!=""){
                                $talkback = "[".date("h:m")."] $buf<br>".chr(0);
                                echo $talkback;
                                for($j=0;$j<$max_clients; $j++){
                                        if((isset($client[$j]))&&($client[$j]['sock']  != null)){
                                                $stat=socket_write($client[$j]['sock'], $talkback, strlen($talkback));
                                                while($stat==false){
                                                        socket_write($client[$j]['sock'], $talkback, strlen($talkback));
                                                }
                                        }
                                }
                        }
                }
        }
}
//закрываем главный сокет
socket_close($sock);
?>
ссылка на архив флэшка+пхп
 

zap

Guest
зачем ты используеш сокет, объясни мне, есть гораздо проще способ общения ФЛЕША И РНР!
 

webman

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

DiTHER

bang bang
>> XML!! http://novemberain.com/livedocs/Help/ActionScriptLangRef/00001882.html
это тут вообще ни к селу ни к городу

--
The protocol is described in the following list:
_ XML messages are sent over a full-duplex TCP/IP stream socket connection.
_ Each XML message is a complete XML document, terminated by a zero (0) byte.
_ An unlimited number of XML messages can be sent and received over a single XMLSocket connection.

и используется класс XMLSocket.

-~{}~ 16.07.05 16:56:

обращаю внимание на "terminated by zero byte"
 

webman

Новичок
ребята, я прошу совет по сокетам на пхп, а не советы какими другими способами можно решить проблемы, меня интересуют только сокеты
 

webman

Новичок
на xml совсем не похоже :) похоже на хтмл, строка может быть любая, просто текстовое поле в флэш отображает тест как хтмл, можно сделать
$talkback = "[".date("h:m")."] $buf \n".chr(0);
 

Profic

just Profic (PHP5 BetaTeam)
webman
Этот код спроектирован неверно. Как правильно - поищи в форуме пост young-а, где как раз есть пример реализации socket-сервера
 
Сверху