web-dev-qa-db-ja.com

nc -lの動作を理解する方法

ncのマニュアルを読みましたが、nc -l

ncがリモートホストへの接続を開始するのではなく、着信接続をリッスンすることを指定するために使用されます。このオプションを-p-s、または-zオプションと組み合わせて使用​​すると、エラーになります。さらに、-wオプションで指定されたタイムアウトは無視されます。

私の理解では、nc -lのアクションはサーバーのように見えます。たとえば、同じサーバー上で、nc -l 9000のある端末はポート9000でリッスンします。nc localhost 9000のある他の端末はクライアントになります。したがって、2番目の端末から最初の端末にメッセージを送信できます。

ただし、今日はApache Flinkについて学習しています。これがFlinkのHello Worldです: https://ci.Apache.org/projects/flink/flink-docs-stable/getting-started/tutorials/local_setup.html

$ nc -l 9000
lorem ipsum
ipsum ipsum ipsum
bye

ここでのnc -lのアクションは、ポートでリッスンするのではなく、一種のメッセージを送信しているようです。

私は混乱しています。

2
Yves

着信接続のターゲットであっても、netcatがデータを送信することを妨げません。クライアントが接続すると、クライアントとの間でデータを送受信できます。この場合、Flinkクライアントにデータを送信しています。

4
muru

例のnc -l 9000はサーバーのように機能します。 Flinkアプリケーションはこのサーバーに接続し、入力を待ちます。 Flinkはncコマンドを実行した後に開始されることに注意してください。

これで接続されました。 ncに単語を入力すると、Flinkアプリケーションが応答します(出力ファイルに書き込むことにより)。

アプリケーションにデータを送信するためにnc -lを使用するという事実は少し逆に感じるかもしれませんが、ncとFlinkがこの方法で通信するのを妨げるものは何もありません。

3
Kusalananda

nc -l <port>は確かに<port>を開き、接続をリッスンします

手順は、以下の手順に従って検証できます

ステップ1:ターミナルを開いてnc -l 32000を実行することでそれをリッスンします

ステップ2:別のターミナルを開き、telnet localhost 32000で開いているポートに接続します

ステップ2a:どちらかの端末に文字列を入力すると、他の端末のリスナーに送信されます。


また、nc -l 32000の後にnetstatを実行すると、接続の状態がリスナーとして表示されます

netstat -atn | grep 32000 tcp4 0 0 *.32000 *.* LISTEN

0
nhonnava