#!/usr/bin/perl -w #****************************************** # script client.pl - Client TCP/IP # usage : client.pl srv_dest # # Ce programme envoie des trames de données # via le réseau au script serveur.pl # # Maxence - Version 1.0 du 9 septembre 2003 # ***************************************** use strict; use IO::Socket; use Sys::Hostname; # PROTOTYPES sub connexion($); sub wlog($$); # VARIABLES GLOBALES my $hote_distant; # nom du serveur distant passe en argument pour la connexion tcp/ip (my $port_distant=getservbyname('TCPReport', 'tcp')) || wlog("pb getservbyname : $!", 1); # recup No port my $localname=hostname(); # Recupere le nom de la machine locale $localname =~ s/^(.+)\..+\..+/$1/; # on supprime le nom de domaine my $cpt = 1; # compteur de tentatives de connexion tcp sub wlog($$) # on journalise le premier parametre dans /var/log/nom_du_prog.log avec la date d'inscription { my $data=shift; my $quit=shift; # quitte le programme si $quit = 1 my $prog = $0; open(LOG, ">> /var/log/$prog.log") or die("Ouverture de /var/log/$data.log impossible : $!"); my ($jour, $mois, $an, $heure, $min, $sec )=(localtime)[3,4,5,2,1,0]; my $date=sprintf "%02d/%02d/%d %02d:%02d:%02d",$jour,($mois+1),($an+1900),$heure,$min,$sec; print LOG "$date $data\n"; close(LOG); if ($quit == 1) { exit(0); } } sub connexion($) { my $data = shift; while ( $cpt < 3 ) { # CREER LA SOCKET CLIENT if ( my $socket = IO::Socket::INET->new(PeerAddr => $hote_distant, PeerPort => $port_distant, Proto => "tcp", Type => SOCK_STREAM) ) { # VERSION DE TEST wlog("J'envoie : $localname ABC:DEF:GHI $data",0); print $socket "$localname ABC:DEF:GHI ".$data."\n"; # on n'oublie pas le \n # VERSION RRDTOOL #wlog("$localname rrd:$localname"."_msg.rrd:0 $data",0); #print $socket "$localname rrd:$localname"."_msg.rrd:0 ".$data."\n"; # on n'oublie pas le \n # VERSION MySQL #wlog("$localname sql:mypostfix:matable $data",0); #print $socket "$localname sql:mypostfix:matable ".$data."\n"; # on n'oublie pas le \n close($socket); last; } else { wlog("Le client TCP/IP n'a pas pu être lancé (tentative No $cpt): $!", 0); sleep(2); $cpt++; } } } #*********************************************** #********* PROGRAMME PRINCIPAL **************** #*********************************************** if ( @ARGV > 0 ) { $hote_distant=$ARGV[0]; } # récupère le nom du serveur distant else { print(" usage : $0 nom_du_serveur_distant\n"); exit(1); } # APPEL DE LA FONCTION DE CONNEXION connexion("DATA:VAL1:VAL2:VAL3");