Perl send()UDP数据包到多个活动客户端

时间:2013-05-09 16:58:41

标签: perl udp client send

我正在实现基于perl的UDP服务器/客户端模型。套接字函数recv()和send()用于服务器/客户端通信。似乎send()从recv()调用获取返回地址,我只能让服务器响应发送初始请求的客户端。但是,我正在寻找服务器将数据发送到所有活动客户端而不是仅发送源客户端。如果已知每个活动客户端的peer_address和peer_port,我如何使用perl send()将数据包路由到特定客户端? 一些尝试:

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()路由到已知客户端的示例都将非常感激。

1 个答案:

答案 0 :(得分: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);
}