У меня есть два компьютера, подключенных к сети, отправляющих и получающих данные UDP.Отправляющий компьютер - Windows с использованием SocketTest v 3.0.0
Получающий - Macbook с использованием этого кода Ruby для эхо-сервера:
require 'eventmachine'
EM.run do
puts "EM.run"
EM.open_datagram_socket '0.0.0.0', 9100 do |server|
puts "socket open"
def server.receive_data(data)
puts "data received: #{data}"
send_data("sending back: #{data}")
end
end
end
Когда я запускаю эту программу и отправляю данные с компьютера Windows, ничегослучается.Но когда я запускаю эту программу на секунду рядом с эхо-сигналом Eventmachine:
require 'socket'
s = UDPSocket.new
while 1 do
puts "sending..."
s.send "hi", 0, "localhost", 9100
end
Eventmachine печатает несколько сообщений «hi», как и предполагалось, и с этого момента он также получает данные с компьютера, подключенного к сети (я вижу,«отправка ответа» на компьютер с Windows).
Почему это так?Насколько я понимаю, UDP не имеет соединения, поэтому он должен принимать все данные с данного порта.Как сигнал от "localhost" запускает сокет для прослушивания здесь из сети?