level 9
sevk
楼主
#ruby 自动对时器 win32
require 'socket'
require 'time'
require "dl/import"
require "dl/struct"
module Kernel32
extend DL::Importable
dlload 'kernel32'
SYSTEMTIME = struct [
"WORD wYear",
"WORD wMonth",
"WORD wDayOfWeek",
"WORD wDay",
"WORD wHour",
"WORD wMinute",
"WORD wSecond",
"WORD wMilliseconds",
]
# These use GMT.
extern "void GetSystemTime(SYSTEMTIME*)"
extern "BOOL SetSystemTime(const SYSTEMTIME*)"
# These use local time, like ruby's Time.now.
extern "void GetLocalTime(SYSTEMTIME*)"
extern "BOOL SetLocalTime(const SYSTEMTIME*)"
end
# +time+ is a Time
def set_clock(time)
local_time = Kernel32::SYSTEMTIME.malloc
local_time.wYear = time.year
local_time.wMonth = time.month
local_time.wDay = time.day
local_time.wHour = time.hour
local_time.wMinute = time.min
local_time.wSecond = time.sec
local_time.wMilliseconds = time.usec/1000
unless Kernel32.setLocalTime(local_time)
raise "Could not set local time to #{time}."
else
puts 'set time ok'
end
end
$geted = false
def g(s)
exit if $geted
sleep 0.5
t=s.recv_nonblock(2000).grep(/date:/i)[0]
$geted = true
puts 'get time'
ti= Time.parse t[5..-1]
set_clock(ti)
end
#取服务器时间
TCPSocket.open("www.g.cn", 80) {|s|
s.send "GET / HTTP/1.0\r\n\r\n", 0
40.times{ g(s) rescue nil }
}
2011年06月11日 01点06分
1
require 'socket'
require 'time'
require "dl/import"
require "dl/struct"
module Kernel32
extend DL::Importable
dlload 'kernel32'
SYSTEMTIME = struct [
"WORD wYear",
"WORD wMonth",
"WORD wDayOfWeek",
"WORD wDay",
"WORD wHour",
"WORD wMinute",
"WORD wSecond",
"WORD wMilliseconds",
]
# These use GMT.
extern "void GetSystemTime(SYSTEMTIME*)"
extern "BOOL SetSystemTime(const SYSTEMTIME*)"
# These use local time, like ruby's Time.now.
extern "void GetLocalTime(SYSTEMTIME*)"
extern "BOOL SetLocalTime(const SYSTEMTIME*)"
end
# +time+ is a Time
def set_clock(time)
local_time = Kernel32::SYSTEMTIME.malloc
local_time.wYear = time.year
local_time.wMonth = time.month
local_time.wDay = time.day
local_time.wHour = time.hour
local_time.wMinute = time.min
local_time.wSecond = time.sec
local_time.wMilliseconds = time.usec/1000
unless Kernel32.setLocalTime(local_time)
raise "Could not set local time to #{time}."
else
puts 'set time ok'
end
end
$geted = false
def g(s)
exit if $geted
sleep 0.5
t=s.recv_nonblock(2000).grep(/date:/i)[0]
$geted = true
puts 'get time'
ti= Time.parse t[5..-1]
set_clock(ti)
end
#取服务器时间
TCPSocket.open("www.g.cn", 80) {|s|
s.send "GET / HTTP/1.0\r\n\r\n", 0
40.times{ g(s) rescue nil }
}