{category}

Ruby - ネットワークプログラミング

TCPSocket

ティーシーピーソケット(標準ライブラリ

意味 TCP通信用のソケットクラス


TCPSocketとは?

TCPSocketは、TCP(Transmission Control Protocol)を使用してネットワーク通信を行うためのクラスです。信頼性の高い双方向通信を提供し、データの送受信を行います。Webサーバーとの通信など、多くのネットワークアプリケーションで使用されます。

TCPSocketの具体的な使い方

HTTPリクエストの送信

require 'socket'

begin
  # TCPSocketを使用してHTTP接続を確立
  socket = TCPSocket.new('example.com', 80)

  # HTTPリクエストを送信
  socket.print("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")

  # レスポンスを読み取り
  response = socket.read

  # レスポンスを表示
  puts "受信したHTTPレスポンス:"
  puts response
ensure
  # 接続を閉じる
  socket.close if socket
end

👇出力結果

受信したHTTPレスポンス:
HTTP/1.1 200 OK
Age: 557638
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Mon, 22 May 2023 10:30:15 GMT
Etag: "3147526947+ident"
Expires: Mon, 29 May 2023 10:30:15 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (nyb/1D1C)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    ...
</html>

この例では、TCPSocketを使用してexample.comのWebサーバー(ポート80)に接続し、HTTPリクエストを送信しています。サーバーからのレスポンスを読み取り、表示した後、接続を適切に閉じています。エラー処理も含まれており、接続が確実に閉じられるようになっています。

シンプルなチャットサーバーの実装

require 'socket'

server = TCPServer.new(2000)
puts "チャットサーバーが起動しました。ポート2000で接続を待機中..."

loop do
  client = server.accept
  Thread.new do
    begin
      puts "新しいクライアントが接続しました: #{client.peeraddr[2]}"
      client.puts "チャットサーバーへようこそ!メッセージを入力してください。"
      
      loop do
        message = client.gets.chomp
        break if message.downcase == 'exit'
        puts "クライアントからのメッセージ: #{message}"
        client.puts "サーバーがメッセージを受信しました: #{message}"
      end
    ensure
      client.close
      puts "クライアントとの接続を閉じました: #{client.peeraddr[2]}"
    end
  end
end

この例では、TCPSocketを使用して簡単なチャットサーバーを実装しています。サーバーはポート2000で接続を待ち受け、クライアントが接続すると新しいスレッドを作成してクライアントとの通信を処理します。クライアントは'exit'と入力するまでメッセージを送信し続けることができます。

TCPSocketに関するよくある質問

Q. TCPSocketとは何ですか?
A. TCPSocketは、TCP(Transmission Control Protocol)を使用してネットワーク通信を行うためのRubyのクラスです。信頼性の高い双方向通信を提供し、データの送受信を可能にします。
Q. TCPSocketの主な用途は?
A. TCPSocketの主な用途には、Webサーバーとの通信、メールサーバーとの通信、カスタムネットワークプロトコルの実装などがあります。HTTPやSMTPなどの多くのインターネットプロトコルがTCP上で動作しています。
Q. TCPSocketの接続をどう閉じますか?
A. TCPSocketの接続を閉じるには、closeメソッドを使用します。例: client.close。接続を適切に閉じることで、リソースリークを防ぎ、ネットワークリソースを効率的に管理できます。
Q. UDPSocketとの違いは何ですか?
A. TCPSocketは接続指向で信頼性が高く、データの順序と到達を保証します。一方、UDPSocketは非接続型で信頼性が低いですが、オーバーヘッドが少なく高速です。用途に応じて適切な方を選択します。
Q. TCPSocketでタイムアウトを設定できますか?
A. はい、TCPSocketでタイムアウトを設定できます。connect_timeoutオプションを使用して接続時のタイムアウトを、setsockoptメソッドを使用して読み書き操作のタイムアウトを設定できます。

TCPSocketが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、RubyのTCPSocketやComplex、JSON、Net::HTTP、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


Rubyを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!Rubyはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

Complex

複素数を扱うためのクラス

種類: 数学ライブラリ

JSON

軽量なデータ交換フォーマット

種類: データ形式

Net::HTTP

HTTPクライアントの機能を提供

種類: ネットワークプログラミング

.ruby-version

Rubyのバージョン指定ファイル

種類: バージョン管理

Fiber

軽量な並行処理の仕組み

種類: ファイバー