鑑於:
服務器上運行的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的:在未知的錯誤...
絕對檢查你的返回值,儘管很難想象爲什麼在數據報套接字上recv會失敗。 – Bklyn 2009-05-02 03:50:59
我檢查了recv(..)和$!的返回值。沒有從recv(..)和$!的返回值! ='未知錯誤'。 – smskelley 2009-05-06 14:56:22