Angesichts dessen:
Der Server läuft unter Windows xp mit ActiveState Perl
Der Server ist mit einem internen und einem externen Netz verbunden.
Ein Computer im internen Netz sendet in udp an 10.4.255.255 auf Port 9722
Ich muss es tun:
den Rundfunk abhören und die Nachrichten an eine Funktion weitergeben
Dies ist der Code, den ich verwende:
my $sock;
do {
eval {
$sock = IO::Socket::INET->new(LocalPort => 9722, Proto => 'udp')
or die("Couldn't open the socket: $@");
1;
};
warn($@) and sleep(5) if($@);
} while ($@);
for(my $i = 0;$i < 20;$i++) {
my $string = 'a';
$sock->recv($string,1024);
print &parseInput($string);
}
Beachten Sie, dass &parseInput die ursprüngliche Zeichenkette zurückgibt, die ihm übergeben wurde.
Mein Problem:
nach dem Aufruf von $sock->recv() wird $string leer. Mit einer anderen Anwendung kann ich sehen, dass zweifelsohne Informationen über 10.4.255.255 gesendet werden, aber ich kann nicht darauf zugreifen.
wenn möglich, möchte ich weiterhin IO::Socket::INET verwenden.
edit: Ich habe den Rückgabewert von recv(..) und $! überprüft. Es gibt keinen Rückgabewert von recv(..) und $! = 'Unknown Error'.
edit 2: Ich versuche jetzt Socket; zu verwenden und habe das folgende:
$proto = getprotobyname('udp');
socket(SOCKET, PF_INET, SOCK_DGRAM, $proto) or die "socket: $!";
setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST, 1) or die "sockopt: $!";
bind(SOCKET, sockaddr_in(9722, inet_aton('192.168.0.103'))) or die "bind: $!";
recv(SOCKET, $msg, 128, 0) or die "recv: $!";
Es erzeugt den Fehler -- recv: Unbekannter Fehler bei ...