Quiero hacer una comunicación cliente-servidor por sockets de tal forma que:
1. al conectarse el cliente se muestre un mensaje en el servidor de CLIENTE CONECTADO (esto ya lo he conseguido),
2. desde el cliente escribo una cadena de texto que envío al servidor para que lo procese y lo convierta a mayúsculas,
3. y el servidor envía al cliente la cadena en mayúsculas.
Y FALLO EN EL TERCER PUNTO.
¿Cómo lo consigo? Tengo este código hecho:
SERVIDOR:
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- #servidor
- use IO::Socket;
- system ("title SERVIDOR");
- $puerto = 9000;
- $protocolo="tcp";
- $servidor = IO::Socket::INET->new(
- Proto => $protocolo,
- LocalPort => $puerto,
- Listen => 1,
- Reuse => 1,
- );
- die "No puedo configurar el Servidor" unless $servidor;
- system("cls");
- system ("color a");
- print "\n";
- print scalar(localtime); print "\n\n";
- print "[Servidor INICIADO]\n\n";
- print "Puerto de comunicaciones: $puerto \n\n";
- print "Esperando conexiones remotas...\n\n";
- # $|++;
- while( $remoto = $servidor->accept() ) #se mantiene a la espera de conexiones cliente
- {
- $remoto->autoflush(1);
- #activar el autoflush(), para que el envío de mensajes sea por cada línea, y no por bloques.
- print "\nNuevo Cliente conectado!\n";
- while($datos_cliente = <$remoto> )
- {
- print "Cadena recibida: $datos_cliente";
- print "Cadena transformada por el servidor: ";
- $datos_cliente=uc($datos_cliente);
- print $datos_cliente; print "\n\n";
- }
- }
- close $servidor;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
CLIENTE
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- #CLIENTE MUY SENCILLO
- use IO::Socket;
- system ("title CLIENTE");
- $puerto = 9000;
- $protocolo="tcp";
- $cliente = IO::Socket::INET->new(
- Proto => $protocolo,
- PeerAddr => "localhost",
- PeerPort => $puerto,
- Reuse => 1,
- );
- die "problema" unless $cliente;
- system ("cls");
- print scalar(localtime); print "\n\n";
- print "[Cliente INICIADO]\n\n";
- print "Puerto de comunicaciones: $puerto \n\n";
- print "Introduce un texto para enviar: ";
- $mensaje = <STDIN>;
- print $cliente $mensaje; #envío el mensaje al servidor a través del socket abierto.
- close $cliente or die "close: $!";
- print "\nSOCKET Cerrado\n";
- print "Pulse INTRO para continuar";
- $nada=<STDIN>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4