• Publicidad

Ayuda con Socket

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Ayuda con Socket

Notapor escanda » 2008-07-11 10:20 @472

Hola a todos ¿Qué tal? Yo soy novato en Perl y por eso les pido que por favor me ayuden, necesito que dos pc se puedan hablar entre sí. Para eso escribí el siguiente código.

Servidor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
use Socket;

# use port 7890 as default
my $port = shift || 7890;
my $proto = getprotobyname('tcp');

# create a socket, make it reusable
socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
   or die "Can't open socket $!\n";
setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1)
   or die "Can't set socket option to SO_REUSEADDR $!\n";

my $paddr = sockaddr_in($port, INADDR_ANY);

# bind to a port, then listen
bind( SOCKET, pack( 'Sn4x8', AF_INET, $port, "\0\0\0\0" ))
       or die "Can't bind to port $port! \n";
listen(SOCKET, 5) or die "listen: $!";
print "SERVER started on port $port\n";

# accepting a connection
my $client_addr;
while ($client_addr = accept(NEW_SOCKET, SOCKET)) {
        # send them a message, close connection
        print NEW_SOCKET "PROBANDO";
        close NEW_SOCKET;
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cliente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
# client.pl
#----------------

use strict;
use Socket;

# initialize host and port
my $host = shift || `hostname`;
my $port = shift || 7890;
my $server = "192.168.10.58";

# create the socket, connect to the port
socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2])
   or die "Can't create a socket $!\n";
connect( SOCKET, pack('Sn4x8', AF_INET, $port, $server))
       or die "Can't connect to port $port! \n";

my $line;
while ($line = <SOCKET>) {
        print "$line\n";
}
close SOCKET or die "close: $!";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A la hora de probar esto no pasa nada y me aparecen errores, así que les pido por favor ayuda.

Gracias.
escanda
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2008-07-11 10:15 @469

Publicidad

Notapor explorer » 2008-07-11 11:02 @501

Bienvenido a los foros de Perl en Español, escanda.

En estos foros hay algunos ejemplos de clientes y servidores. ¿Cómo son esos errores?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor escanda » 2008-07-11 11:08 @505

En el caso del servidor me dice
Código: Seleccionar todo
Argument "\0\0\0\0" isnt numeric in pack at C:Documents........

y en el caso del cliente me dice:
Código: Seleccionar todo
Argument "192.168.10.58" isnt numeric in pack at C:Documents......


Desde ya gracias. saludos
escanda
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2008-07-11 10:15 @469

Notapor creating021 » 2008-07-11 14:33 @648

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
# client.pl
#----------------

use strict;
use Socket;

# initialize host and port
my $host = shift or `hostname`; # esto no sirve de nada!
my $port = shift or 7890;
my $server = "192.168.10.58";

# create the socket, connect to the port
socket( SOCKET, AF_INET, SOCK_STREAM, getprotobyname('tcp') )
   or die "Can't create a socket $!\n";
my $sin = sockaddr_in( $port, inet_aton( $server ) );

if ( connect ( SOCKET, $sin ) ) {
    while ( my $line = <SOCKET> ) {
        print "$line\n";
    }
}
else { die "Can't connect to $server : $!\n"; }
shutdown( SOCKET, 2 ) or die "close: $!";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Debería de funcionar.

Editado

En cuanto al servidor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
use Socket;

# use port 7890 as default
my $port = shift or 7890;
my $proto = getprotobyname('tcp');

# create a socket, make it reusable
socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
   or die "Can't open socket $!\n";
setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1)
   or die "Can't set socket option to SO_REUSEADDR $!\n";

my $paddr = sockaddr_in($port, INADDR_ANY);

# bind to a port, then listen
my $in = sockaddr_in( $port, INADDR_ANY);
bind( SOCKET,$in )
       or die "Can't bind to port $port! \n";
listen(SOCKET, 5) or die "listen: $!";
print "SERVER started on port $port\n";

# accepting a connection
my $client_addr;
while ($client_addr = accept(NEW_SOCKET, SOCKET)) {
        # send them a message, close connection
        print NEW_SOCKET "PROBANDO";
        close NEW_SOCKET;
}
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Te recomiendo Perl Coockbook e IO::Socket.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados