ACE在同一PC上具有多个应用程序实例 - 仅首先获取消息

ACE with multiple app instances on same pc - only first gets the message

本文关键字:实例 应用程序 消息 获取 PC ACE      更新时间:2023-10-16

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

我在堆叠上读了许多线程,应该是可能的。

不过,当我从每个应用程序实例打开连接时,我可以看到每个实例都会发送一条消息,但仅第一个实例(如果首先关闭,则第二...)会收到该消息。

我正在使用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(*listaDdress)",那么我会从应用程序的第一个实例中获取错误,代码enodev。

我不确定我知道您要做什么...发送消息多播以使多个接收器获取它,或者允许多个进程在同一UDP端口Unicast上接收。..我猜前者。

您使用的是ACE_SOCK_DGRGRAMCAST类,但使用Unicast地址和操作。因此,只有一个实例会收到该消息。

检查ace_wrappers/tests/multicast_test.cpp,以获取如何发送和接收多播的示例。