netcatを使用して簡単なチャットを構築する方法は?


27

現在、プロジェクトに取り組んでおり、netcatライブラリを使用して簡単なチャットアプリケーションを実装しています。

クライアントは、ポート番号とコマンドを入力するように求められます

nc -l -p xxxx

どこxxxxのクライアントが入力したポート番号です。

同様に、ホストは同じポート番号の入力を求められ、次を使用して接続が確立されます。

nc <ip_address> -p xxxx

ただし、メッセージを入力する人のユーザー名は表示されないため、空白のチャットエクスペリエンスが得られます。

hey
hello
what's up
Nothing

代わりに、次のようなものにしたい

Foo : hey
Boo : hello
Foo : what's up
Boo : Nothing

netcatこの機能を実現するために使用できますか、またはこれを行う他の何かがありますか?


1
nc知らusernameないで送信できません。できるのは、フォーマットでメッセージを入力することだけですBob: hello
-2707974

私はその正確なことを避けたいです。また、同じ機能を実現できる別のプログラムも受け入れています。
サチンカマス

回答:


34

このようなことができます。

アリスがサーバーだと仮定します。彼女はタイプします:

mawk -W interactive '$0="Alice: "$0' | nc -l -p <port_number> <ip_of_alice>

次に、ボブはそのサーバーに接続します。彼はタイプします:

mawk -W interactive '$0="Bob: "$0' | nc <ip_of_alice> <port_number>

mawk行は、単に「チャット」に人の前に付ける名前を追加します。-W interactiveバッファーなしの書き込みをstdoutに、行バッファー付きの読み取りをstdinに設定する必要があります。


アリスは次のように入力しますHi Bob

Hi Bob

ボブは見ています:

Alice: Hi Bob

ボブはタイプHi Aliceして見ます:

Alice: Hi Bob
Hi Alice

アリスは見ている:

Hi Bob
Bob: Hi Alice

2
ncは、-sと-lを同時に使用できません。-sは必要ありません。
サチンカマス

私はAWKを得た:オプション認識できない「`-Wインタラクティブ、無視
zt1983811

@ zt1983811 awkではなくGNUが必要mawkです。
カオス

@chaos awk awk -W interactive '$ 0 = "Alice:" $ 0' | nc -lvk ip port; ls -al / usr / bin / awk lrwxrwxrwx 1 root root 21 Jun 27 06:48 / usr / bin / awk-> / etc / alternatives / awk
zt1983811

1
@ zt1983811これはmawkオプションであり、ではありませんgawkmawk明示的に使用してみましたか?
デザート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.