« Gainerはじめてみました。 | メイン | libxml-rubyでXML Schemaのバリデーションをしてみる »

RubyでUDPブロードキャストを送受信してみる

複数サーバで動いているサーバ上でIPアドレスを知らない相手に
メッセージ送受信をしたい機会が出てきたので、
RubyでUDP broadcastを送受信するのを調べてみました。

server:


#!/usr/bin/env ruby

require 'socket'
require 'yaml'

SETTING = YAML.load_file('./udp.yaml')
sock = UDPSocket.open()

sock.bind('0.0.0.0', SETTING[:expose_port])
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)

while(1) do
  p sock.recvfrom(20)
end

client:


#!/usr/bin/env ruby

require 'socket'
require 'yaml'
SETTING = YAML.load_file('./udp.yaml')
sock = UDPSocket.open()

port = SETTING[:expose_port]
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
p sock.send("Hello\n", 0, "<broadcast>", port)

というかんじでできました。
送信側のsend時の<broadcast>と、受信側のbind時の'0.0.0.0'が肝でした。
受信側のbindアドレスに'localhost'とかだとだめみたいです。

起動時にUDPブロードキャストデータグラムを送信して、
管理プログラムにクライアントを登録するような使い方が便利です。

たぶんPythonとかでも大体同じだと思います。

トラックバック

このエントリーのトラックバックURL:
http://antas.jp/mtsys/mt-tb.cgi/571

この一覧は、次のエントリーを参照しています: RubyでUDPブロードキャストを送受信してみる:

» RubyでUDPブロードキャストを送受信してみる その2 送信元 やまかわのログ
同一マシン内外の複数プロセスにブロードキャストメッセージを送る必要があり、 さて... [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)