#!/usr/bin/perl -w use strict; use IO::Socket; use Getopt::Long; use File::Basename; my $scriptname = basename($0); my $scriptdir = dirname($0); ## Standard options my $silent; my $verbose; GetOptions( "s" => \$silent, "v" => \$verbose, ); my $localhost = '192.168.0.100'; my $port = 55555; my $save_loc = '/var/tmp/client-server-gets'; my $server = new IO::Socket::INET ( LocalHost => $localhost, LocalPort => $port, Proto => 'tcp', Listen => 1, Reuse => 1, ); $server or die "Can't create server: $!\n"; printinfo("$scriptname listening on port $port"); while(my $HANDLER = $server->accept()) { $HANDLER or die "server->accept: $!\n"; my $peeraddr = $HANDLER->peeraddr; my $peerhost = $HANDLER->peerhost; my $hostinfo = gethostbyaddr($peeraddr, AF_INET); printinfo("Accepted connection from $peerhost"); my $in = <$HANDLER>; chomp($in); if ($in) { printinfo("Client said \"$in\""); my ($cmd,) = split(/\s+/, $in); $in =~ s/.*?\s+//; if ($cmd eq 'repeat') { print $HANDLER localtime() . ": you said \"$in\"\n"; printinfo("Sent \"$in\" to client"); } elsif ($cmd eq 'reverse') { $in = reverse($in); print $HANDLER localtime() . ": you said \"$in\"\n"; printinfo("Sent \"$in\" to client"); } elsif ($cmd eq 'fetch') { my $file = basename($in); if ($verbose) { system("wget -N -P $save_loc $in"); } else { system("wget -N -P $save_loc -q $in"); } my $rc = $? >> 8; if ($rc == 0) { printinfo("Fetch of item \"$in\" successful"); print $HANDLER "Requested item saved as $save_loc/$file\n"; } else { printinfo("Fetch of item \"$in\" failed"); print $HANDLER "Sorry, your request failed\n"; } } else { print $HANDLER "Sorry, there was no known command attached to your msg\n"; } } } sub printinfo { unless($silent) { print localtime() . ": @_\n"; } } __END__