今回の記事では、Rubyを使った基礎的なネットワーク通信について解説します。
TCPによる通信
インターネット上で行われる通信のほとんどはTCPというプロトコル (お互いこの方法でやりとりしましょう, という取り決め) のもと行われています。ウェブページを閲覧する際使われるHTTPも、サーバにログインする際使われるSSHも、TCPの上に実装されているプロトコルです。
TCPには通信の信頼性を上げるための仕組みが組み込まれています。たとえば通信中にデータが失われたり連続して送ったデータが受け取り側で順番が狂ってしまったり、といった事態が発生する可能性があります。そういった時に適切な順序に並び替えたり「失敗したからさっきのもう一回送って」とリクエストしてくれるのがTCPプロトコルです。
RubyからTCP通信を行う基板となるクラスはTCPSocket
です。TCPSocket
を継承したTCPServer
クラスが用意されているので、これを使ってまずはTCP通信を受け取るサーバを作ってみましょう。
TCPサーバ
2000番ポートでTCPServerを作成した後、loopを開始してTCPServer#accept
メソッドで接続を待ちます。相手が接続して来たら、TCPServer#accept
は相手のsocketを返します。あとはそのsocketからデータが送られてくるのを待ち(IO#gets
)、送られてきたデータに「:D」を付けてそのまま返すプログラムです。
このサーバに対してtelnetで接続して対話してみます。
「hoge」はtelnet側から入力した文字列、その下の「hoge :D」がサーバから帰ってきた文字列です。想定通り動いていることがわかります。
telnetコマンドを使っても十分役割は果たせるのですが、せっかくなので次のページではクライアント側もRubyで作成してみましょう。