Учитывая, что:
Сервер на Windows XP работает с ActiveState Perl
Сервер подключен к внутренней сети и внешней сети
Компьютер во внутренней сети передает в формате udp 10.4.255.255 через порт 9722
Мне нужно:
прослушать трансляцию и передать сообщения функции
Это код, который я использую:
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);
}
обратите внимание, что & parseInput возвращает исходную строку, в которой она была передана.
Моя проблема:
после вызова $ sock-> recv () $ string становится пустым. Используя другое приложение, я вижу, что, несомненно, есть информация, передаваемая по 10.4.255.255, но я не могу получить к ней доступ.
если это вообще возможно, я хотел бы продолжать использовать IO :: Socket :: INET.
edit: я проверил возвращаемое значение recv (..) и $ !. нет возвращаемого значения из recv (..) и $! = 'Неизвестная ошибка'.
edit 2: я пытаюсь использовать Socket; сейчас и имеют следующее:
$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: $!";
Выдает ошибку - recv: Unknown error at ...