【问题标题】:ACE with multiple app instances on same pc - only first gets the messageACE 在同一台电脑上有多个应用程序实例 - 仅首先获取消息
【发布时间】:2017-02-15 15:28:06
【问题描述】:

我正在尝试创建多个实例将在同一台机器上运行的应用程序,它们将通过同一端口通过 UDP 一起通信。

我在 StackOverflow 上阅读了很多关于它的帖子,认为它应该是可能的。

但是,当我从每个应用程序实例打开连接时,我可以看到每个实例都发送一条消息,但只有第一个实例(如果第一个实例已关闭,那么第二个...)会收到该消息。

我正在使用 ACE 库进行通信。代码摘录:

ACE_SOCK_Dgram_Mcast dgram;
ACE_INET_Addr *listenAddress = new ACE_INET_Addr(12345, ACE_LOCALHOST);
dgram.open(*listenAddress);

ACE_INET_Addr peer_address;
char buffer[1024];

dgram.send(buffer, 256);

while (true)
{
    if (dgram.recv(buffer, 256, peer_address, 0, &receiveLoopTimeout) != -1)
    {
        std::cout << "Received" << std::endl;
    }
}

我还发现,如果我调用“dgram.join(*listenAddress)”,则会收到错误,来自应用程序的第一个实例的代码 ENODEV。

【问题讨论】:

    标签: c++ udp ace


    【解决方案1】:

    我不确定我是否理解您要做什么...发送消息多播以便多个接收者获取它,或者允许多个进程在同一个 UDP 端口单播上接收...我猜是前者.

    您正在使用 ACE_SOCK_Dgram_Mcast 类,但具有单播寻址和操作。所以只有一个实例会收到该消息。

    查看 ACE_wrappers/tests/Multicast_Test.cpp 以获取有关如何发送和接收多播的示例。

    【讨论】:

    • 您好,我正在尝试两者兼有 - 发送消息以便多个接收者得到它 + 允许多个进程在同一个 UDP 端口上接收。出于测试目的,我仅将其发送到本地计算机以测试它是否可以被多个进程接收。我会检查那个例子,谢谢。
    • 哦,所以现在当我使用一个带有 (12345, "10.10.0.255") 的 dgram 进行发送和另一个带有 (12345, ACE_LOCALHOST) 的接收时,我会收到所有消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2021-06-22
    • 2019-01-18
    相关资源
    最近更新 更多