netcatコマンドでコードを書かずにお手軽チャット環境作ってみる

nc(netcat)コマンドという万能コマンドがありまして、これを使うと簡単にTCPUDPを使ってパケットの読み書きができます。
以下の例だと、HOSTの行と次の空行まで入力すれば、htmlの文章が返ってきます。

$ nc www.example.com 80
GET / HTTP/1.1
HOST:www.example.com

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html
〜略〜
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
〜略〜

こんなふうに手動でHTTPプロトコルを再現したりできるわけです。

ncコマンドは、リッスンモードというものがあり、これを使うと簡易的にサーバのように振る舞うことができます。
これを応用して、一方ではサーバを立ち上げます。

$ nc -l localhost 1234

もう一つ端末をひらき、クライアントを立ち上げます。

$ nc localhost 1234

これだけで、サーバとクライアントが準備できました。
あとは、端末に適当に文字を入力すると…

Hello World!
こんにちは!
明日は大雪が降るそうですね(^_^;)

サーバ、クライアント両方の端末に同じ文字列が表示されました。
もちろん、サーバ側から打っても、クライアント側から打っても同じように表示されます。簡単ですね。
簡単のため、サーバもクライアントもlocalhostを用いましたが、別々のホストでも、接続先とポート番号さえ合わせれば同じように動きます。

双方に同じ文字列が表示されるのでどちらが送信したかわかりづらいのが欠点ですが、これだけでチャットができてしまうのは面白いですね。