rubyでTCPソケットを開いてデータのやりとりをしてみた
rubyにてtelnetやssh等をしているとTCPsocketクラスというものが目についた
ふと、ポートをlistenしてデータのやり取りもできるのだろうか?と気になったので試してみた
コード
require 'socket' serv = TCPServer.open("localhost", 0) c = TCPSocket.new(*serv.addr.values_at(3,1)) s = serv.accept c.puts "fooooooooo!!" c.puts "fooooooooo!!" p "server: #{s.gets}" p "server: #{s.gets}" s.puts "booooooooo!!" s.puts "booooooooo!!" p "client: #{c.gets}" p "client: #{c.gets}"
TCPServer.openでの引数は(開く先、ポート番号)という形となる
※""というように何も記述しなくてもlocalhostを掴むようだがわかりやすく記述
ちなみに0番ポートはany portと呼ばれる動的なポート割当だ
0-1023の範囲のポート番号は、ウェルノウンポート番号と呼ばれている。0番のポートはエニーポート(any port)と呼ばれ、アプリケーションに対して、動的に別番号の空きポートを割り当てるために用意された特殊なポート番号である。別番号のポートの再割り当てを行わずに0番のポートとして使用することは禁止されているため、利用上では注意が必要である。
出力
"server: fooooooooo!!\n" "server: fooooooooo!!\n" "client: booooooooo!!\n" "client: booooooooo!!\n"
できた、TCPソケット通信とても面白い