Ruby Tips!

RubyのTipsを紹介します

TCPサーバを実装する

RubyTCPサーバを簡単に実装するにはsocketライブラリのTCPServerクラスを使うと良い。

TCPServer.newには、接続を待ち受けるIPアドレスと、ポート番号を指定する。クライアントからの接続はTCPServer#acceptで待つ。TCPServer#acceptはクライアントとの接続を確立すると、クライアントと通信するソケットを返す。これを別スレッドに渡して1クライアント1スレッドで処理させる。

以下は上記のことを踏まえて、受信した内容をそのまま送信する、いわゆるエコーサーバを実装した例である。このサーバに対して、例えばtelnet localhost 1234してみると、確かに送信した内容を送り返してくるサーバが実装できたことがわかる。

require 'socket'

server = TCPServer.new('0.0.0.0', 1234)
loop do
  socket = server.accept
  Thread.start(socket){|s|
    while l = s.gets
      s.write l
    end
    s.close
  }
end