Bueno, el día de ayer me puse a crear una especie de chat con sockets, utilizando un servidor y un cliente y utilizarlo en localhost. El motivo de este mensaje se debe a dos cosas. Las listo:
- Que me digan cómo puedo hacer para hacerlo entre dos computadoras con diferentes IP, no en localhost como lo hago actualmente.
- Que me den recomendaciones de cómo se podría optimizar más el código, para programar más ordenadamente y así.
servidor.pl
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use IO::Socket;
- # Configuración del servidor
- my $servidor = IO::Socket::INET->new
- (
- LocalPort => 1717,
- Proto => 'tcp',
- Listen => SOMAXCONN,
- Reuse => 1
- ) or die "[ERROR] No se pudo iniciar el servidor: $!.";
- # Auto refresco del servidor
- $servidor->autoflush(1);
- print "[Servidor a la espera de conexiones]\n";
- # Conexión con cada cliente
- while(my $cliente = $servidor->accept())
- {
- print "[Se ha conectado un nuevo cliente]\n";
- say $cliente "Bienvenido a mis dominios, iniciemos una conversación.";
- # Inicio del chat
- while(defined(my $comando = <$cliente>))
- {
- print ">> $comando\n";
- my $respuesta = <STDIN>;
- print $cliente $respuesta;
- }
- print "[La conexión ha terminado]\n";
- close $cliente;
- }
- close $servidor || die "close: $!";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
cliente.pl
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use IO::Socket;
- my $servidor = IO::Socket::INET->new
- (
- PeerAddr => 'localhost',
- PeerPort => 1717,
- Proto => 'tcp',
- Timeout => 1
- ) or die "[ERROR] No se pudo establecer la conexión. $!";
- STDOUT->autoflush(1);
- print "[Conectando con el servidor...]\n";
- print scalar <$servidor>;
- while($servidor->connected)
- {
- my $comando = <STDIN>;
- print $servidor $comando; # Envío de texto
- print ">>", scalar <$servidor>; # Respuesta
- }
- close $servidor;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Agradecería bastante sus ayudas
Saludos.