Tengo una gran duda, no me corre el servidor MP3, solo me dice "Server Ready..Waiting for Connecctions"
Estoy utilizando el PERL Express 2.5, SERA POR ESO. O tengo que hacer como un archivo tipo ejecutable para esto?
Este fue el codigo que utilice, A CONTINUACION...
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use IO::Socket;
#tomar el puerto a controlar o por default 8000
my $port = $ARGV[0] || 8000;
#Ignorar proceos hijos para evitar zombies
$SIG{CHLD}='IGNORE';
#Crear el socket a escuchar
my $listen_socket = IO::Socket::INET->new(LocalPort => $port,
Listen => 10,
Proto => 'tcp',
Reuse => 1,
);
#Asegurarnos que estamos controlando el puerto
die "Cant´t create a listening socket: $@" unless $listen_socket;
warn "Server ready. Waiting for connections ... \n";
#Esperar conexiones
while (my $ connection = $listen_socket->accept) {
my $child;
#crear el fork para salir
die "Can't fork: $!" unless defined ($child = fork());
#¡el hijo!
if ($child == 0) {
#cerrar el puerto para escuchar el proceso hijo
$listen_socket->close;
#llamar la funcion principal del hijo
play_songs($connection);
#si el hijo regresa salte
exit 0;
}
#¡soy el padre!
else {
#¿quien se conecto?
warn "Connecton recieved ... ",$connection->peerhost,"\n";
#cerrar la conexion, ya fue mandada a un hijo
$connection->close();
}
#regresa a escuchar otras conexiones
}
sub play_songs {
my $socket = shift;
#sacar todas las canciones posibles
open PLAYLIST, "C:\cerati.m3u" or die;
my @songs = <PLAYLIST>;
close PLAYLIST;
chomp @songs;
#crear el creador de canciones random
srand(time / $$);
#crear un loop eterno hasta que el cliente deje de escuchar
while() {
#Mandar el header necesario
print $socket "HTTP/1.0 200 0k\n";
print $socket "Content-Type: audio/x-mp3stream\n";
print $socket "Cache-Control: no-cache \n";
print $socket "Pragma: no-cache \n";
print $socket "Connection: close \n";
print $socket "x-audiocast-name: My MP3 Server\n\n";
#seleccionar una cancion aleatoria de tu lista
my $song = $songs[ rand @songs ];
#que cancion estamos tocando
warn ( "play song: $song\n");
#abrir la cancion o intentar con otra
open (SONG, $song) || next;
binmode(SONG); #para usuarios de windows
my $read_status = 1;
my $print_status = 1;
my $chunk;
#Esta parte imprime el binario al socket
#Lo hace lo mas rapido posible
while( $read_status && $print_status ) {
$read_status = read (SONG, $chunk, 1024);
if( defined $chunk && defined $read_status) {
$print_status = print $socket $chunk;
}
undef $chunk;
}
close SONG;
unless( defined $print_status ) {
$socket->close();
exit(0);
}
}
}
use strict;
use IO::Socket;
#tomar el puerto a controlar o por default 8000
my $port = $ARGV[0] || 8000;
#Ignorar proceos hijos para evitar zombies
$SIG{CHLD}='IGNORE';
#Crear el socket a escuchar
my $listen_socket = IO::Socket::INET->new(LocalPort => $port,
Listen => 10,
Proto => 'tcp',
Reuse => 1,
);
#Asegurarnos que estamos controlando el puerto
die "Cant´t create a listening socket: $@" unless $listen_socket;
warn "Server ready. Waiting for connections ... \n";
#Esperar conexiones
while (my $ connection = $listen_socket->accept) {
my $child;
#crear el fork para salir
die "Can't fork: $!" unless defined ($child = fork());
#¡el hijo!
if ($child == 0) {
#cerrar el puerto para escuchar el proceso hijo
$listen_socket->close;
#llamar la funcion principal del hijo
play_songs($connection);
#si el hijo regresa salte
exit 0;
}
#¡soy el padre!
else {
#¿quien se conecto?
warn "Connecton recieved ... ",$connection->peerhost,"\n";
#cerrar la conexion, ya fue mandada a un hijo
$connection->close();
}
#regresa a escuchar otras conexiones
}
sub play_songs {
my $socket = shift;
#sacar todas las canciones posibles
open PLAYLIST, "C:\cerati.m3u" or die;
my @songs = <PLAYLIST>;
close PLAYLIST;
chomp @songs;
#crear el creador de canciones random
srand(time / $$);
#crear un loop eterno hasta que el cliente deje de escuchar
while() {
#Mandar el header necesario
print $socket "HTTP/1.0 200 0k\n";
print $socket "Content-Type: audio/x-mp3stream\n";
print $socket "Cache-Control: no-cache \n";
print $socket "Pragma: no-cache \n";
print $socket "Connection: close \n";
print $socket "x-audiocast-name: My MP3 Server\n\n";
#seleccionar una cancion aleatoria de tu lista
my $song = $songs[ rand @songs ];
#que cancion estamos tocando
warn ( "play song: $song\n");
#abrir la cancion o intentar con otra
open (SONG, $song) || next;
binmode(SONG); #para usuarios de windows
my $read_status = 1;
my $print_status = 1;
my $chunk;
#Esta parte imprime el binario al socket
#Lo hace lo mas rapido posible
while( $read_status && $print_status ) {
$read_status = read (SONG, $chunk, 1024);
if( defined $chunk && defined $read_status) {
$print_status = print $socket $chunk;
}
undef $chunk;
}
close SONG;
unless( defined $print_status ) {
$socket->close();
exit(0);
}
}
}
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4
ESPERO ME PUEDEN AYUDAR
GRACIAS