我寫這個Ruby程序發送一個UDP數據包到端口16800:爲什麼我沒有收到發送到我自己的IP的UDP包?
require 'socket'
sock = UDPSocket.new
sock.bind("", 47123)
sock.send("Hello!", 0, "192.168.0.100", 16800)
sock.close
其中192.168.0.100是我自己的IP地址。但是,數據包不會顯示在Wireshark中,我的UDP服務器在同一臺PC(運行Linux)上偵聽端口16800時沒有收到任何內容。
當我稍微程序改寫爲
require 'socket'
sock = UDPSocket.new
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
sock.bind("", 47123)
sock.send("Hello!", 0, "<broadcast>", 16800)
sock.close
了數據包在Wireshark的顯示出來,但我的服務器仍然沒有收到任何東西。
我錯過了一些明顯的東西嗎?
編輯: 服務器代碼,完整性
require 'socket'
sock = UDPSocket.new
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
sock.bind(nil, 16800)
while true
packet = sock.recvfrom(1024)
puts packet
end
然而,這地方從互聯網上,並在編輯它計算器複製,我發現服務器總是收到發往127.0包。 0.1但是當我改變爲「」時,服務器突然也收到上面發送的數據包。這是在ruby套接字實現中的錯誤嗎?
嘗試127.0.0.1? – 2009-08-25 12:15:16