Ruby: TCPSocket、Socket クラスを使って TCP、SSL クライアントをつくる
- Ruby: HTTP メッセージを解析する
- Ruby: Socket、TCPServer クラスを使って echo サーバーをつくる
- Ruby: TCPSocket、Socket クラスを使って TCP、SSL クライアントをつくる
- Ruby: SSL 対応の echo サーバーをつくる
まずは TCPSocket を使う場合。
require 'socket' msg = "GET / HTTP/1.1\r\n" \ + "Host: localhost\r\n" \ + "Connection: close\r\n" \ + "\r\n" s = TCPSocket.new 'localhost', 12345 s.puts msg ret = '' while line = s.gets ret += line end s.close puts ret
Socket クラスを使う場合、次のようになる。
require 'socket' include Socket::Constants port = 12345 host = '0.0.0.0' msg = "GET / HTTP/1.1\r\n" \ + "Host: localhost\r\n" \ + "Connection: close\r\n" \ + "\r\n" socket = Socket.new AF_INET, SOCK_STREAM socket.set_encoding 'UTF-8' sockaddr = Socket.pack_sockaddr_in port, host socket.connect sockaddr socket.write msg ret = socket.read socket.close puts ret
次に SSL クライアントを書いてみる。TCPSocket を OpenSSL::SSL::SSLSocket で包めばよい。
require 'socket' require 'openssl' port = 12345 host = '0.0.0.0' msg = "GET / HTTP/1.1\r\n" \ + "Host: localhost\r\n" \ + "Connection: close\r\n" \ + "\r\n" context = OpenSSL::SSL::SSLContext.new socket = TCPSocket.new host, port ssl_client = OpenSSL::SSL::SSLSocket.new socket, context ssl_client.connect ssl_client.puts msg ret = ssl_client.read puts ret