gpt4 book ai didi

c++ - 在同一台电脑上具有多个应用程序实例的 ACE - 只有首先收到消息

转载 作者:行者123 更新时间:2023-11-28 05:17:46 25 4
gpt4 key购买 nike

我正在尝试创建多个实例将在同一台机器上运行并且它们将通过同一端口通过 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。

最佳答案

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

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

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

关于c++ - 在同一台电脑上具有多个应用程序实例的 ACE - 只有首先收到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253491/

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