LoginSignup
3

More than 5 years have passed since last update.

IP メッセンジャーでブロードキャストできなかった(けど、できた)

Posted at

http://witworks.blogspot.jp/2010/06/ruby-wake-on-lan.html ままですが、取り急ぎ、メモ。

※ コード整理は後程…

ip_messenger.rb
# coding: utf-8
require "socket"

class IPMessenger
  def initialize(host, user = nil, group = nil)
    @port, @version, @command = 2425, 1, 32
    @sock  = UDPSocket.new
    @host  = host
    @user  = user
    @group = group
    @num = $$ || 0
  end

  def sendmsg(host, msg)
    @num += 1
    str = sprintf("%d:%d:%s:%s:%d:%s", @version, @num, @user, host, @command, msg).encode('Shift_JIS')
    @sock.send(str, 0, host, @port)
  end

  def login
    @num += 1
    command = 6291713
    msg     = "#{@user}\00#{@group}"
    str = sprintf("%d:%d:%s:%s:%d:%s", @version, @num, @user, @host, command, msg).encode('Shift_JIS')
    @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
    @sock.send(str, 0, '255.255.255.255', @port)
  end

  def logout
    @num += 1
    command = 861706453
    msg     = ''
    str = sprintf("%d:%d:%s:%s:%d:%s", @version, @num, @user, @host, command, msg).encode('Shift_JIS')
    @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
    @sock.send(str, 0, '255.255.255.255', @port)
  end
end

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3