Я пытаюсь настроить простой UDP-клиент и сервер, используя Ruby. Код выглядит так:
require 'socket.so'
class UDPServer
def initialize(port)
@port = port
end
def start
@socket = UDPSocket.new
@socket.bind(nil, @port) # is nil OK here?
while true
packet = @socket.recvfrom(1024)
puts packet
end
end
end
server = UDPServer.new(4321)
server.start
Это клиент:
require 'socket.so'
class UDPClient
def initialize(host, port)
@host = host
@port = port
end
def start
@socket = UDPSocket.open
@socket.connect(@host, @port)
while true
@socket.send("otiro", 0, @host, @port)
sleep 2
end
end
end
client = UDPClient.new("10.10.129.139", 4321) # 10.10.129.139 is the IP of UDP server
client.start
Теперь у меня есть две машины VirtualBox под управлением Linux. Они находятся в одной сети, они могут пинговать друг друга.
Но когда я запускаю UDP-сервер на машине A, а затем пытаюсь запустить UDP-клиент на машине B, я получаю следующую ошибку:
client.rb:13:in `send': Connection refused - sendto(2) (Errno::ECONNREFUSED)
Я подозреваю, что ошибка в методе bind на сервере. Я не знаю, какой адрес я должен указать там. Я где-то читал, что вы должны использовать адрес вашего интерфейса LAN / WAN, но я не знаю, как получить этот адрес.
Может кто-нибудь помочь мне с этим?