適当な備忘録

日々のメモ程度に雑に書いていきます。

rubyでTCPソケットを開いてデータのやりとりをしてみた

rubyにてtelnetssh等をしていると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番のポートとして使用することは禁止されているため、利用上では注意が必要である。

ja.wikipedia.org

出力

"server: fooooooooo!!\n"
"server: fooooooooo!!\n"
"client: booooooooo!!\n"
"client: booooooooo!!\n"

できた、TCPソケット通信とても面白い