gpt4 book ai didi

ruby - 如何在一个接口(interface)上加入多个组播组

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:11 29 4
gpt4 key购买 nike

我可用的 Ruby 版本是 1.8.7,无法升级,因为它是目前在所有公司 Linux 服务器上使用的标准镜像的一部分,我所做的任何事情都需要能够在所有这些服务器上运行而不会出现问题(我希望这不会成为问题)

我正在做的项目是在 Linux 服务器上重新创建当前在 Windows 上运行的应用程序。该应用程序获取多播组和接口(interface)的列表,并尝试加入这些组,然后监听任何数据(无论什么数据),报告它是否可以加入以及数据是否存在。它可以帮助我们在将实际软件部署到服务器之前在我们的环境中证明网络连接。它将接收的数据将是来自交易所的二进制编码的财务信息,因此我不需要输出(因此注释掉行和输出)我只需要检查它是否可用于服务器。

我在网上阅读了一些代码,我将这些代码拼凑成一个小版本,其中它加入了绑定(bind)到 1 个接口(interface)的 1 个多播组,并监听数据一段时间,报告是否收到任何数据。

然后我想添加第二个多播组,这就是我对如何实现这一目标缺乏理解的地方。我的代码如下:

#!/usr/bin/ruby

require 'socket'
require 'ipaddr'
require 'timeout'

MCAST_GROUP_A =
{
:addr => '233.54.12.111',
:port => 26477,
:bindaddr => '172.31.230.156'
}
MCAST_GROUP_B =
{
:addr => '233.54.12.111',
:port => 18170,
:bindaddr => '172.31.230.156'
}

ipA = IPAddr.new(MCAST_GROUP_A[:addr]).hton + IPAddr.new(MCAST_GROUP_A[:bindaddr]).hton
ipB = IPAddr.new(MCAST_GROUP_B[:addr]).hton + IPAddr.new(MCAST_GROUP_B[:bindaddr]).hton

begin
sockA = UDPSocket.open
sockA.setsockopt Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ipA
sockA.setsockopt Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ipB
sockA.bind Socket::INADDR_ANY, MCAST_GROUP_A[:port]
sockA.bind Socket::INADDR_ANY, MCAST_GROUP_B[:port]

timeoutSeconds = 10
Timeout.timeout(timeoutSeconds) do
msg, info = sockA.recvfrom(1024)
#puts "MSG: #{msg} from #{info[2]} (#{info[3]})/#{info[1]} len #{msg.size}"
puts "MSG: <garbled> from #{info[2]} (#{info[3]})/#{info[1]} len #{msg.size}"
end
rescue Timeout::Error
puts "Nothing received connection timedout\n"
ensure
sockA.close
end

运行时出现的错误是:

[root@dt1d-ddncche21a ~]# ./UDPServer.rb ./UDPServer.rb:35:in `setsockopt': Address already in use (Errno::EADDRINUSE) from ./UDPServer.rb:35

这就是我现在所处的位置,首先可以真正指出问题所在(希望更新代码),然后一旦我这个示例工作,下一步将在混合中添加第二个接口(interface)以再次监听多个多播组,

最佳答案

好的,所以我遵循了建议,首先为每个端口绑定(bind)到接口(interface),然后为我想要收听的每个多播组添加成员,这解决了这个特定问题并让我继续处理下一个问题。下一期我将作为一个新主题提出。

关于ruby - 如何在一个接口(interface)上加入多个组播组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31158737/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com