#perl #udp #discovery
#perl #udp #обнаружение
Вопрос:
В моей сети есть простое устройство, которое отвечает на широковещательные передачи udp определенного сообщения. Он отвечает отправителю информацией о местоположении. Я могу отправить широковещательную передачу и увидеть правильный ответ, поступающий на Wireshark, но мой код perl не показывает ответ. Я знаю, что это должно быть просто, но я не вижу этого…
#!/usr/bin/perl
use warnings;
use IO::Socket::INET;
print "n>> Discovery Program <<n";
#--
#-- find.pl
#--
# Create a sending socket
my $sock = IO::Socket::INET->new(
PeerPort => 55555,
PeerAddr => inet_ntoa(INADDR_BROADCAST),
Proto => 'udp',
LocalPort => 0,
Broadcast => 1)
or die "Can't bind : $@n";
# Send message
my $msg = "XYZ";
chomp $msg;
$sock->send($msg);
# Receive message
my $text;
$sock->recv($text,128);
print "nReceived message '", $text,"'n";
Комментарии:
1. Вероятно, вам следует проверить возвращаемое значение
$sock->send
и$sock->recv
на предмет определенности, и ошибка будет в,$!
если какой-либо метод возвращаетundef
.2.
recv
Возвращается?3. recv не возвращается.