Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
@thread.join end @mutex.synchronize { num = @buffer.shift } end num.to_i endendt = TrueRandom.new(1,6,1000,300)count = {1=>0, 2=>0, 3=>0, 4=>0, 5=>0, 6=>0}10000.times do |n| x = t.rand count[x] += 1endp count# При одном прогоне:# {4=>1692, 5=>1677, 1=>1678, 6=>1635, 2=>1626, 3=>1692}18.2.2. Запрос к официальному серверу времени
Как мы и обещали, приведем программу для обращения к NTP-серверу в сети (NTP — Network Time Protocol (синхронизирующий сетевой протокол). Показанный ниже код заимствован с небольшой переработкой у Дэйва Томаса.
require "net/telnet"timeserver = "www.fakedomain.org"local = Time.now.strftime("%H:%M:%S")tn = Net::Telnet.new("Host" => timeserver, "Port" => "time", "Timeout" => 60, "Telnetmode" => false)msg = tn.recv(4).unpack('N')[0]# Преобразовать смещение от точки отсчетаremote = Time.at(msg — 2208988800).strftime("%H:%M:%S")puts "Местное : #{local}"puts "Удаленное : #{remote}"Мы устанавливаем соединение и получаем четыре байта. Они представляют 32-разрядное число в сетевом (тупоконечном) порядке байтов. Это число преобразуется в понятную форму, а затем — из смещения от точки отсчета в объект
TimeМы не указали имя реального сервера. Дело в том, что его полезность часто зависит от того, где вы находитесь. Кроме того, многие серверы ограничивают доступ, так что для запроса вы должны получить разрешение или хотя бы уведомить владельца. Поисковая машина поможет найти открытый NTP-сервер в радиусе 1000 км от вас.
18.2.3. Взаимодействие с РОР-сервером
Многие серверы электронной почты пользуются почтовым протоколом (Post Office Protocol — POP). Имеющийся в Ruby класс
POP3Для создания объекта класса
Net::POP3startВызов метода
mailsPOPMaileachОбъект
POPMailheaderallallФрагмент кода стоит тысячи слов. Вот пример обращения к серверу с после дующей распечаткой темы каждого сообщения:
require "net/pop"pop = Net::POP3.new("pop.fakedomain.org")pop.start("gandalf", "mellon") # Имя и пароль пользователя.pop.mails.each do |msg| puts msg.header.grep /^Subject: /endМетод
deletefinishrequire "net/pop"pop = Net::POP3.new("pop.fakedomain.org")pop.start("gandalf", "mellon") # Имя и пароль пользователя.pop.mails.each do |msg| if msg.all =~ /.*make money fast.*/ msg.delete endendpop.finishОтметим, что при вызове метода
startFile.openМетод
alleachall# Напечатать все строки в обратном порядке... полезная штука!msg.all { |line| print line.reverse }# To же самое...msg.all.each { |line| print line.reverse }Методу
allline<<arr = [] # Пустой массив.
