Ruby Tips!

RubyのTipsを紹介します

TCPクライアントを実装する

TCPクライアントを実装するにはsocketライブラリのTCPSocketを使う。以下は簡単なHTTPクライアントの例である。

require 'socket'
TCPSocket.open('www.yahoo.co.jp', 80){|s|
  s.print "GET / HTTP/1.0\r\n\r\n"
  print s.read
}

TCPSocket.openには、接続先のIPまたはホスト名と、ポート番号を指定する。ブロックには接続済みのソケットが渡される。ソケットはIOのサブクラスなので、IOと同様にprintreadといったメソッドを使って、自由に通信することができる。ブロックを抜けるとソケットは自動的にcloseで閉じられる。

TCPSocket.openにブロックを渡さない場合は、接続済みのソケットが返される。こちらは通信が終わったら自分でTCPSocket#closeで通信を閉じる必要がある。以下は上記のコードをブロックを使わずに書きなおした例である。

require 'socket'
begin
  s = TCPSocket.open('www.yahoo.co.jp', 80)
  s.print "GET / HTTP/1.0\r\n\r\n"
  print s.read
ensure
  s.close if s
end