鉴于:
服务器在运行 ActiveState Perl
的 windows xp 上 服务器连接到内部网络和外部网络
内部网络上的计算机正在通过 udp 广播到端口 9722 上的 10.4.255.255
我需要:
收听广播并将消息传递给函数
这是我正在使用的代码:
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。
编辑:我检查了 recv(..) 和 $! 的返回值。recv(..) 和 $! 没有返回值 =“未知错误”。
编辑 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 ...