2013-05-09 46 views
2

我正在實現基於perl的UDP服務器/客戶端模型。套接字函數recv()和send()用於服務器/客戶端通信。似乎send()從recv()調用中獲取返回地址,我只能讓服務器迴應發送初始請求的客戶端。不過,我正在尋找服務器將數據發送給所有活動客戶端,而不是僅發送源客戶端。如果每個活動客戶端的peer_address和peer_port是已知的,我怎樣才能使用perl send()將數據包路由到特定的客戶端? 一些嘗試:Perl將UDP包發送給多個活動客戶端

foreach (@active_clients) { 
    #$_->{peer_socket}->send($data); 
    #$socket->send($_->{peer_socket}, $data, 0, $_->{peer_addr}); 
    #send($_->{peer_socket}, $data, 0, $_->{peer_addr}); 
    $socket->send($data) #Echos back to source client 
} 

的Perldoc send簡要介紹了參數的傳遞。我試圖採用這種方法,結果是1)客戶端只是接收套接字glob對象,或者2)從未收到數據包或者3)拋出錯誤。如何使用send()路由到已知客戶端的任何示例都將非常感謝。

回答

3

是,只存儲地址的某個地方,並回答他們:

# receiving some packets 
while (my $a = recv($sock, $buf, 8192, 0)) { 
    print "Received $buf\n"; 
    push @addrs, $a; 
    # exit at some point 
} 

# send the answers 
for my $a (@addrs) { 
    send($sock, "OK", 0, $a); 
} 
+0

謝謝伯努瓦。我打電話給recv有點不同: $ socket-> recv($ received_data,1024); 但是,使用您發佈的方法,我能夠成功捕獲所有活動客戶端並向他們廣播消息。 – Burns 2013-05-12 21:59:44

相關問題