を放送するためにリスニング:サーバーは、ActiveStateのPerlの
サーバは、内部ネットワークと外部ネットワークに接続されているを実行しているWindows XP上で
内部ネットワーク上のコンピュータは、UDPでの放送は10.4にありますポート上の.255.255 9722
UDPサーバーがあることを考えると
に私が必要:
が放送に耳を傾け、機能
にメッセージを渡す。これは、私が使用していたコードです:
my $sock;
do {
eval {
$sock = IO::Socket::INET->new(LocalPort => 9722, Proto => 'udp')
or die("Couldn't open the socket: [email protected]");
1;
};
warn([email protected]) and sleep(5) if([email protected]);
} while ([email protected]);
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:私はソケットを使用しようとしています。今、次があります
$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:
ありがとう!私はブロードキャストアドレスにバインドしようとしましたが、私はあなたのコードに似ています。 – smskelley
あなたは答えが好きで、それがあなたの問題を解決するように思えるなら、それをマークしてあなたの答えとして選ぶことができますか?ありがとう! –