0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2025/1/9 学習記録

Posted at

現状:

エンジニアへの未経験転職。
就職先も決まり、2月からひよこエンジニアに。

2025年は頑張ろうということで、2025年学習記録9日目。

内容は常に書き散らしのメモです、あしからず。

当面の目標:LPIC101,102合格

Rubyのみでローカルホストに接続する方法

以下は、Rubyのコードスニペットに含まれる各行の詳細な解説です。

require 'socket'
  • 意味: Rubyの標準ライブラリであるsocketを読み込みます。このライブラリは、TCP/IP通信を行うためのクラス(TCPServerTCPSocketなど)を提供します。
server = TCPServer.new(2000)
  • 意味: ポート番号2000で新しいTCPサーバーを作成します。TCPServer.newメソッドは、指定したポートで接続要求を待ち受けるサーバーインスタンスを返します。このサーバーは、クライアントからの接続を受け入れる準備が整います。
loop do
  • 意味: 無限ループを開始します。このループ内で、クライアントからの接続を待ち受け、処理を行います。無限ループにすることで、サーバーが常に動作し続けることができます。
  client = server.accept
  • 意味: クライアントからの接続を受け入れます。acceptメソッドは、接続が確立されると新しいTCPSocketインスタンス(ここではclient)を返します。このインスタンスを通じて、クライアントとの通信が可能になります。
  request = client.gets
  • 意味: クライアントから送信されたリクエストデータを1行読み取ります。getsメソッドは、クライアントからのデータを受信し、その内容を変数requestに格納します。この行は、HTTPリクエストの内容を取得するために使用されますが、この例ではリクエスト内容は特に処理されていません。
  response = "HTTP/1.1 200 OK\r\n"
  • 意味: HTTPレスポンスの最初の行を設定します。この行はHTTPバージョンとステータスコード(ここでは200 OK)を示しています。これは、クライアントに対してリクエストが成功したことを伝えるためのものです。
  response += "Content-Type: text/html\r\n"
  • 意味: レスポンスヘッダーに「Content-Type」を追加します。このヘッダーは、レスポンスの内容がHTMLであることを示しています。これにより、ブラウザは受信したデータを正しく解釈できます。
  response += "\r\n"
  • 意味: ヘッダーとボディの区切りとして空行(CRLF)を追加します。HTTPプロトコルでは、ヘッダーとボディの間には必ず空行が必要です。
  response += "<html><body><h1>Hello, Ruby!</h1></body></html>"
  • 意味: HTTPレスポンスボディにHTMLコンテンツを追加します。この場合、「Hello, Ruby!」というメッセージが表示されるシンプルなHTML文書です。
  client.print response
  • 意味: 構築したHTTPレスポンス全体をクライアントに送信します。printメソッドは、指定されたデータをソケット経由で送信します。
  client.close
  • 意味: クライアントとの接続を閉じます。これにより、リソースが解放され、新たな接続が可能になります。サーバーは次のクライアントからの接続要求を待ち受ける状態になります。
end
  • 意味: loop do の終わりです。これにより、無限ループが継続し、新しいクライアントからの接続待機状態に戻ります。

このコード全体は、非常にシンプルなHTTPサーバーとして機能し、ポート2000で接続されたクライアントに「Hello, Ruby!」というメッセージを返すことができます。

Citations:
[1] https://qiita.com/sho-19202325/items/6c677fdfaf279c3e4b4f
[2] https://zenn.dev/skakimoto/articles/2024-10-25-create-socket-ruby-wrapper
[3] https://zenn.dev/redheadchloe/articles/9f9cbac85e2717
[4] https://zenn.dev/kuredev/articles/aa26f88cd643de
[5] https://zenn.dev/tmtms/articles/202103-ruby-socket-tcp
[6] https://zenn.dev/oott0228/articles/8e509b699ea19e
[7] https://docs.ruby-lang.org/ja/latest/class/TCPServer.html
[8] https://docs.ruby-lang.org/ja/2.0.0/method/TCPServer/s/new.html
[9] https://www.twilio.com/ja-jp/blog/5-ways-make-http-requests-ruby-jp
[10] http://www2.nagano.ac.jp/hiraoka/NP/tcpServer1.html
[11] https://qiita.com/akiray03/items/0689497093c961a3e627
[12] https://blog.sarabande.jp/post/82583858106

gitコマンド

  • git init.git ディレクトリの作成
  • git add . :ファイルの変更内容をステージに追加する
  • git commit -m "メッセージ" :メッセージを付けたコミットを実行する

今日はここまで!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?