Sunday, September 06, 2009

Ruby UDP sample

echo_srv.rb
require "socket"

port = ARGV[1] || 'echo'
sock = UDPSocket.open
sock.bind('', port)

loop do
msg, (afam, port, host, ip) = sock.recvfrom(1024)
sock.send(msg, 0, ip, port)
end

Server側はClient毎にスレッド化する必要がない
recvfromしたデータにはClientのアドレス情報が入ってる
エコーバックするときにそのアドレス情報を指定する

echo_cln.rb
require "socket"

host = ARGV[0] || 'localhost'
port = ARGV[1] || 'echo'

sock = UDPSocket.open

while msg = STDIN.gets
sock.send(msg, 0, host, port)
print sock.recvfrom(1024)[0]
end
sock.close

Client側はsendするとき自アドレスを一緒に送る

No comments: