Edited at

rubyでsocketを扱ってみた

More than 3 years have passed since last update.

ruby入門を初めて5日ほどたったので、socketを使った簡単な通信プログラムを組んでみました。

ただまだ経験が浅いのでバグなど、至らないところがあると思いますが気にしないでください。

プログラム概要

今回組んだプログラムはsocketを用いた通信用のプログラムで応用すればリアルタイムチャットのようなものができます。

機能自体はすごくシンプルに、最低限の機能しか搭載していないので、ファイルは二つです。

サーバー側の「connectTCPserver.rb」とクライアント側の「Client.rb」この二つで最低限の機能を構築しました。

簡単に説明すると、まずサーバー側では20000番ポートをデフォルトで開放し、クライアント側からの接続を待ちます。

このとき、サーバー側では複数のクライアントからの接続を想定して、スレッドを実装しました。

クライアント側では、ユーザーネームとメッセージを入力させ、取得した文字列をサーバ側に送ります

この時接続の成否により、表示するメッセージを変更します

補足

このプログラムはポートを開放して動作させるので、環境によっては接続が切断されます。

その時はファイアウォールの設定を変更してください

コード


Client.rb

require "socket"

#usernameの取得
puts "usernameを入力してください"
user = gets.to_s

def mainSystem()
#送信内容の入力
puts "メッセージを入力してください"
msg = gets.to_s
if msg == "exit"
exit!
end
port.puts "#{msg}"
puts "Send: #{Time.now}"

print port.gets

puts "Receive: #{Time.now}"

port.close
end

begin
#localhostの20000ポートに接続
port = TCPSocket.open("localhost",20000)
rescue
puts "TCPSocket.open failed :#$!"
else
while true
#送信内容の入力
puts "メッセージを入力してください"
msg = gets.to_s
if msg == "exit"
exit!
end
port.puts "#{user}:#{msg}"
puts "Send: #{Time.now}"
p port.gets
puts "Receive: #{Time.now}"
end
port.close
end



connectTCPserver.rb

require "socket"

#20000番のポートを解放
s = TCPServer.open(20000)

while true
socket = s.accept
#クライアント側からの接続まち
Thread.start(s.accept) do |client|
print client.gets
p socket.peeraddr

while buf = socket.gets
p buf
end

sleep(5)

client.puts "OK"

client.close
end

end