#!/usr/bin/perl -w
# UDP Client
# Auf der Kommandozeile müssen Ziel-Host und zu sendender String angegeben werden

use IO::Socket;
use strict;

my($sock, $server_host, $msg, $port, $ipaddr, $hishost, 
   $MAXLEN, $PORTNO, $TIMEOUT);

$MAXLEN  = 1024;
$PORTNO  = 5151;
$TIMEOUT = 5;

$server_host = shift;
$msg         = "@ARGV";
$sock = IO::Socket::INET->new(Proto     => 'udp',
                              PeerPort  => $PORTNO,
                              PeerAddr  => $server_host)
    or die "Creating socket: $!\n";
$sock->send($msg) || die "Send: $!";

eval 
  {
  local $SIG{ALRM} = sub { die "Alarm timeout!\n" };
  alarm $TIMEOUT;
  $sock->recv($msg, $MAXLEN) || die "Receive: $!";
  alarm 0;
  1;  # return value von eval
  } or die "Kein Empfang von $server_host nach $TIMEOUT Sekunden.\n";

($port, $ipaddr) = sockaddr_in($sock->peername);
$hishost = gethostbyaddr($ipaddr, AF_INET);
print "Server $hishost antwortete: $msg\n";
