#!/usr/bin/perl -w
use strict;
use IO::Socket;
# Usage:
#
# client.pl [ (--exit|-e) <exit string> ] [ ] [ ]
# client.pl [ -h ] [ --help ]
my $filename = "client.pl";
my $help = "
Usage
$filename [ ] [ ]
Options
( -P | --port ) <port number>
Port to listen
( -p | --protocol )
Set a protocol (tcp, udp, ...). Default is \"tcp\"
( -v | --verbose )
Stop verbose mode
( -h | --help )
This help
";
my $verbose = 1;
my $interactive = 0;
my $narg = '';
my $port = '';
my $protocol = 'tcp';
foreach my $arg (@ARGV){
if($arg eq "--port" || $arg eq "-P"){
$narg = '-P';
}elsif($narg eq "-P"){
$port = $arg;
$narg = '';
}elsif($arg eq "--protocol" || $arg eq "-p"){
$narg = '-p';
}elsif($narg eq "-p"){
$protocol = $arg;
$narg = '';
}elsif($arg eq "--help" || $arg eq "-h"){
die $help;
}elsif($arg eq "--verbose" || $arg eq "-v"){
$verbose = 0;
}else{
$port=$arg;
}
}
# if(-e "config.pl"){
# require "config.pl";
# }else{
# $config::port = 593;
# }
#
# $port=$config::port if !$port;
if(!$port){
die "Failure: Need port number\n" if !$interactive;
print "Please enter the port to connect: ";
$port = ;
chomp $port;
}
my $sock = IO::Socket::INET->new(
LocalPort => $port,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 5,
);
die "Failure: $!\n" if !$sock;
print "Listening to ${port}\n" if $verbose;
while(my $client = $sock->accept()){
my $pid = fork;
die "Failure: Can't fork\n" if !defined($pid);
if($pid==0){ # Child
print "New connexion\n" if $verbose;
$client->send("Hi !\n");
$client->send("type \"exit\" and to close connexion.\n");
my $life = 1;
while($life){
my $rep = <$client>;
chomp $rep;
# chop $rep;
my $len = length $rep;
$life=0 if $rep =~ /^exit/;
$client->send("-->".$rep."<--\n*".$len."*\n");
}
}else{
# Nothing to do. Continue loop.
}
}
close($sock);
Le truc qui me gêne; c'est que lorsque j'envoie une chaîne par telnet, je n'arrive pas a enlever les caractères invisibles même avec chomp (suis obligée de faire un chop mais c'est pas très propre ...)
Voici un exemple:
$ telnet localhost 59300
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hi !
type "exit" and <Retu rn> to close connexion.
quelquechose
<--quelquechose
*13*
aaa
<--aaa
*4*
exit
<--exit
*5*
Connection closed by foreign host.
Alors que je voudrais:
Hi !
type "exit" and <Re turn> to close connexion.
quelquechose
-->quelquechose<--
*12*
aaa
-->aaa<--
*3*
exit
-->exit<--
*3*
Comment pourrais-je enlever ce dernier caractère invisible tout es restant compatible avec tous les clients telnet que ce soit sur Windows, MacOS ou dautres unix ...
Merci
Mildred
# Il me semble...
Posté par bobert . Évalué à 2.
Ceci étant dit, j'ai eu été un grand fan de perl, mais je le regrette vraiment, mais alors vraiment pas, depuis que je me suis mis à python. Sérieusement.
[^] # Re: Il me semble...
Posté par Mildred (site web personnel) . Évalué à 1.
# retour à la ligne
Posté par gc (site web personnel) . Évalué à 2.
selon que la plateforme est unix ce sera \n, windows \r\n ou mac \r alors ce qui suit devrait te convenir
$rep =~ s/\n$//;
$rep =~ s/\r$//;
sinon, tu as oublié de quitter après la boucle while ($life) {} (en l'état tu vas te retrouver avec un serveur de plus à chaque fois)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.