コード ```### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 Ruby初心者です。学校の授業で習い、課題のために以下のプログラムを作成しました。 ```Ruby require "socket" require 'date' require 'time' server = TCPServer.new(20000) loop do Thread.start(server.accept) do |client| # 初回クライアントに伝えるメッセージ client.puts "サーバーに接続されました。" loop do line = client.gets # p line break if line == nil # 送られてきたメッセージがnilだったらループ終わり # 改行を取り除くのと、文字コードをUTF8に強制変更 line = line.chomp.force_encoding("utf-8") # サーバー側に出力 puts "受信: #{line}" # 受信したメッセージに対する何らかの処理を実装する # サンプルで、受け取ったメッセージをそのまま出力 # ret = line # client.puts "サーバーからの応答: #{ret}" if(line == 'date') client.puts Date.today elsif(line == 'time') client.puts Time.now end end end end
その後ターミナルから「nc localhost 20000」で実行したのですが、「Control+C」を試しても何も起こらず、ターミナルにdateを入力すると日付が返ってきてしまう状態です。
発生している問題・エラーメッセージ
接続がずっとつながったままで、プログラムを更新しても反映することが出来ません。
他のポート番号にもつながらないです。
該当のソースコード
Ruby
1require "socket" 2require 'date' 3require 'time' 4 5server = TCPServer.new(20000) 6loop do 7 Thread.start(server.accept) do |client| 8 9 # 初回クライアントに伝えるメッセージ 10 client.puts "サーバーに接続されました。" 11 12 loop do 13 14 line = client.gets 15 # p line 16 break if line == nil # 送られてきたメッセージがnilだったらループ終わり 17 18 # 改行を取り除くのと、文字コードをUTF8に強制変更 19 line = line.chomp.force_encoding("utf-8") 20 21 # サーバー側に出力 22 puts "受信: #{line}" 23 # 受信したメッセージに対する何らかの処理を実装する 24 25 # サンプルで、受け取ったメッセージをそのまま出力 26 # ret = line 27 # client.puts "サーバーからの応答: #{ret}" 28 29 if(line == 'date') 30 client.puts Date.today 31 elsif(line == 'time') 32 client.puts Time.now 33 34 end 35 end 36end 37end
試したこと
netstat -atn|grep LISTENをターミナルに入力してみましたが、localhostで出てきたのはこの二つだけでした。
tcp4 0 0 localhost.49182 localhost.55205 ESTABLISHED
tcp4 0 0 localhost.55205 localhost.49182 ESTABLISHED
想定していないポート番号で接続されているのかもしれませんが、解決法がわかりません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー