Показать сообщение отдельно
Старый 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 -- при отключении


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