Ruby 应用程序没有收到来自不同主机的 UDP 数据包

Ruby application does not receive UDP packet from different host

使用服务器地址 192.168.1.30 从 Ruby 客户端向 Ruby 服务器发送 UDP 数据包按预期工作,但前提是客户端和服务器位于同一主机上。如果客户端在不同的机器上运行,UDP 数据包会找到到达服务器的路径,但我的服务器进程不会注意到。

服务器:

require 'socket'
sock = UDPSocket.new()
sock.bind('', 8999)
p sock
while true do
    p sock.recvfrom(2000)
end
sock.close

客户:

require 'socket'
sock = UDPSocket.new
p sock.send("foo", 0, "192.168.1.30", 8999)
sock.close

启动服务器后,netstat -n --udp --listen 确认套接字已打开:

Proto Recv-Q Send-Q Local Address     Foreign Address         State      
udp        0      0 0.0.0.0:8999      0.0.0.0:*       

在 运行 客户端两次(在 192.168.1.30 和 .23 上)之后,服务器输出仅显示一个传入数据包,缺少来自 192.168.1.23 的数据包:

#<UDPSocket:fd 7, AF_INET, 0.0.0.0, 8999>
["foo", ["AF_INET", 52187, "192.168.1.30", "192.168.1.30"]]

而 Wireshark 表示注意到了两个数据包

No  Time        Source          Destination     Proto Length Info
1   0.000000000 192.168.1.30    192.168.1.30    UDP   47     52187 → 8999 Len=3
2   2.804243569 192.168.1.23    192.168.1.30    UDP   62     39800 → 8999 Len=3

我可能遗漏了哪些明显的细节?

检查您是否激活了任何防火墙规则:

sudo iptables -L
sudo ufw status