サーバーは ActiveState Perl を実行している Windows XP 上にありますサーバー
は内部ネットワークと外部ネットワークに接続されています 内部ネットワーク上
のコンピュータはポート 9722 で 10.4.255.255 に udp でブロードキャストしています
ブロードキャストをリッスンし、メッセージを関数に渡す必要があります
これは私が使用しているコードです:
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 ...