2

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) クライアントが単にソケット グロブ オブジェクトを受信するか、2) パケットがまったく受信されないか、3) エラーがスローされます。send() を使用して既知のクライアントにルーティングする方法の例は、非常に高く評価されます。

4

1 に答える 1