ncat(nmap folkの)には、すべての入力を接続されているすべてのクライアントにコピーするきちんとしたデフォルトの動作があります。たとえば、
ターミナル1でサーバーを起動します。
% mkfifo messages
% exec 8<>messages # hold the fifo open
% ncat -l 5555 -k --send-only < messages
端末 2 と 3 でクライアントのリスニングを開始します。
% nc localhost 5555
ターミナル4のfifoに何かを印刷し、接続されているすべてのクライアント(ターミナル2と3)に同じメッセージが表示されていることを確認してください。
% printf 'Hello, clients.\n' > messages
socatと同じパターンを採用することは可能ですか?
修正する:Philippeのソリューションスクリーンショット:
ベストアンサー1
あなたがしたいことはおそらく不可能です。最も近い方法は次のとおりです。
第1ターミナル:
mkfifo messages
socat PIPE:messages TCP4-LISTEN:5555,fork
ターミナル2と3から:
nc localhost 5555
その時送った文字はmessages
2番ターミナルに現れることもあり、3番ターミナルに現れる時もある。これは、localhost:5555で開かれたソケットを介して提供される前にsocat
テキストが「消費」されるためです。その後、目覚めてソケットからメッセージを読み取るmessages
最初のプロセスはメッセージを受け取り、他のプロセスは何も取得しません。netcat