Ruby应用程序未从其他主机接收UDP数据包

时间:2019-11-29 22:20:12

标签: ruby network-programming udp

使用服务器地址192.168.1.30将UDP数据包从Ruby客户端发送到Ruby服务器,可以正常工作,但前提是客户端和服务器位于同一主机上。如果客户端在其他计算机上运行,​​则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

我可能缺少哪些明显的细节?

1 个答案:

答案 0 :(得分:2)

检查是否有任何活动的防火墙规则:

sudo iptables -L
sudo ufw status