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

问题描述 投票:1回答:1

[使用服务器地址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

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

ruby network-programming udp
1个回答
0
投票

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

sudo iptables -L
sudo ufw status
© www.soinside.com 2019 - 2024. All rights reserved.