ACE在同一台PC上有多个应用实例 - 只有第一个获取消息

时间:2017-02-15 15:28:06

标签: c++ udp ace

我正在尝试创建应用程序,其中多个实例将在同一台计算机上运行,​​并且它们将通过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。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你要做的事情...发送消息多播,以便多个接收者获得它,或允许多个进程在同一个UDP端口单播上接收...我&#39;猜猜前者。

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

检查ACE_wrappers / tests / Multicast_Test.cpp,了解如何发送和接收多播的示例。